计算数据帧中列均值的子集(R编程)



我有一个简单的数据帧:

a=data.frame(first=c(1,2,3),second=c(3,4,5),third=c('x','y','z'))

我试图返回一个数据帧,其中只包含第一列和第二列的列含义。我一直这样做:

apply(a[,c('first','second')],2,mean)

返回适当的输出:

first second 
     2      4 

但是,我想知道我是否可以使用函数by来完成它。我试过这个:

by(a, c("first", "second"), mean)

结果是:

Error in tapply(seq_len(3L), list(`c("first", "second")` = c("first",  : 
  arguments must have same length

然后,我尝试了这个:

by(a, c(T, T,F), mean)

这也没有得到正确的答案:

c(T,T,F): FALSE
[1] NA

有什么建议吗?谢谢

您可以在原始数据的子集上使用colMeans(列平均值)

> a <- data.frame(first = c(1,2,3), second = c(3,4,5), third = c('x','y','z'))

如果你知道列号,但不知道列名,

> colMeans(a[, 1:2])
## first second 
##     2      4 

或者,如果你不知道列号,但知道列名,

> colMeans(a[, c("first", "second")])
## first second 
##     2      4 

最后,如果你对列一无所知,只想知道数字列的方法,

> colMeans(a[, sapply(a, is.numeric)])
## first second 
##     2      4 

by()不是合适的工具,因为它是tapply()的包装器,它将数据帧划分为满足某些条件的子集。如果你有另一列,比如第四列,你可以使用by()为该列拆分数据帧,然后使用apply()对行或列进行操作。

最新更新