Подтвердить что ты не робот

Суммируйте все значения в каждом столбце массива данных в R

Учитывая этот набор данных:

  Name Height Weight
1 Mary     65    110
2 John     70    200
3 Jane     64    115

Я хотел бы суммировать все столбцы классификатора (высота и вес), давая

 199  425

Проблема состоит в том, что квалификаторы могут быть больше, чем просто 2 (т.е. больше чем просто высота и вес).

Я могу это сделать.

    # Create the dataframe people
    Name <- c("Mary", "John", "Jane")
    Height <- c(65,70,64)
    Weight <- c(110,200,115)
    people <- data.frame(Name, Height, Weight)

    res <- c(sum(people$Height),sum(people$Weight))

Но он становится слишком длинным, когда квалификатор увеличивается. Какой компактный способ сделать это?

4b9b3361

Ответ 1

Вы можете использовать функцию colSums() для вычисления суммы всех значений. [,-1] гарантирует исключение первого столбца с именами людей.

 colSums(people[,-1])
Height Weight 
   199    425

Предполагая, что может быть несколько столбцов, которые не являются числовыми, или что порядок столбцов не является фиксированным, более общий подход:

colSums(Filter(is.numeric, people))

Ответ 2

Мы можем использовать dplyr для выбора только числовых столбцов и purr чтобы получить sum для всех столбцов. (может использоваться, чтобы получить то, что когда-либо будет иметь значение для всех столбцов, например среднее, минимальное, максимальное и т.д.)

library("dplyr")
library("purrr")

people %>%
    select_if(is.numeric) %>%
    map_dbl(sum)

Или другой простой способ, используя только dplyr

library("dplyr")
people %>%
    summarize_if(is.numeric, sum, na.rm=TRUE)

Ответ 3

mapply(sum,people[,-1])

Height Weight 
   199    425 

Ответ 4

Для завершения:

 apply(people[,-1], 2, function(x) sum(x))
#Height Weight 
#   199    425