Як підсумувати значення стовпця data.frame?


77

У мене є кадр даних з кількома стовпцями; деякий числовий і якийсь символ. Як обчислити суму конкретного стовпця? Я гугл для цього , і я бачу безліч функцій ( sum, cumsum, rowsum, rowSums, colSums, aggregate, apply) , але я не можу зрозуміти все це.

Наприклад, припустимо, у мене є кадр даних peopleіз наступними стовпцями

people <- read(
  text = 
    "Name Height Weight
    Mary 65     110
    John 70     200
    Jane 64     115", 
  header = TRUE
)
…

Як отримати суму всіх ваг?

Відповіді:


107

Ви можете просто використовувати sum(people$Weight).

sumпідсумовує вектор і people$Weightотримує стовпець ваги з вашого кадру даних.

Примітка - ви можете отримати вбудовану допомогу при використанні ?sum, ?colSumsі т.д. (до речі, colSumsдасть вам суму для кожного стовпчика).


2
коли я роблю це я отримую: [1] NA. Я переглянув дані для цього стовпця, і в останньому рядку є НС, чому?
Користувач

10
Так, ось чому. Ви можете ігнорувати НС, якщо хочете, через sum(people$Weight,na.rm=TRUE)(про це можна прочитати в ?sum).
математичний.

3

Для підсумовування значень data.frameспочатку потрібно витягти їх як вектор.

Є кілька способів це зробити:

# $ operatior
x <- people$Weight
x
# [1] 65 70 64

Або використовуючи [, ]подібну до матриці:

x <- people[, 'Weight']
x
# [1] 65 70 64

Отримавши вектор, ви можете використовувати будь-яку функцію вектора-до-скаляру для агрегування результату:

sum(people[, 'Weight'])
# [1] 199

Якщо у ваших даних є значення NA, вам слід вказати na.rmпараметр:

sum(people[, 'Weight'], na.rm = TRUE)

1

Якщо у стовпці є значення 'NA', тоді

sum(as.numeric(JuneData1$Account.Balance), na.rm = TRUE)

1

замовити після colsum:

order(colSums(people),decreasing=TRUE)

якщо більше 20+ стовпців

order(colSums(people[,c(5:25)],decreasing=TRUE) ##in case of keeping the first 4 columns remaining.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.