对R中data.frame每列中的所有值求和

对R中data.frame每列中的所有值求和,r,R,鉴于此数据集: Name Height Weight 1 Mary 65 110 2 John 70 200 3 Jane 64 115 我想把每一列(身高和体重)的限定词加起来 问题是限定符可能不止2个(即更多) 而不仅仅是身高和体重) 我能做到 # Create the dataframe people Name <- c("Mary", "John", "Jane") Height <- c(65,70,6

鉴于此数据集:

  Name Height Weight
1 Mary     65    110
2 John     70    200
3 Jane     64    115
我想把每一列(身高和体重)的限定词加起来

问题是限定符可能不止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))
#创建数据帧

Name您可以使用函数
colSums()
计算所有值的总和<代码>[,-1]
确保排除包含人名的第一列

 colSums(people[,-1])
Height Weight 
   199    425
假设可能有多个非数字列,或者列顺序不固定,则更通用的方法是:

colSums(Filter(is.numeric, people))

为了完成:

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

我们可以使用
dplyr
仅选择数字列,使用
purr
为所有列获取
sum
。(可用于获取所有列的值,如平均值、最小值、最大值等)

或者只使用
dplyr
-从(dplyr 1.0.0)开始,我们可以使用
cross()



您也可以尝试
a是的,这确实有效,但严格来说比
colSums
更糟糕-效率更低,输入时间更长。
mapply(sum,people[,-1])

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

people %>%
    select_if(is.numeric) %>%
    map_dbl(sum)
library("dplyr")
people %>%
    summarise(across(where(is.numeric), ~ sum(.x, na.rm = TRUE)))
library("dplyr")
people %>%
    summarize_if(is.numeric, sum, na.rm=TRUE)
a <- apply(people[,c(2,3)], 2, sum )