根据列名列表获取数据框中特定列的平均值

时间:2015-02-17 04:47:33

标签: r

我需要修改其他人编写的一些R代码,以使其更通用。编写此代码是为了在具有特定列名的特定数据上运行,但是他们希望能够在完全不同的数据集上运行相同的代码。这意味着我需要使代码采用列名称的向量,并在引用特定列的地方使用它们。

作为一个简单的例子,假设我有一个数据框,其中每一行都是个人的年龄,性别以及关于该人的一系列其他观察值。这是我的数据:

df <- data.frame(age=sample(20:30, 500, T), gender=sample(c("M", "F"), 500, T), 
                 A=sample(1:100, 500, T), B=sample(3:50, 500, T), 
                 C=sample(2:6, 500, T))

然后我希望,对于每对年龄和性别,获得其他变量的平均值。在具体情况下,我想做:

df.means <- ddply(df, .(age, gender), summarize, mean_A = mean(A), mean_B = mean(B))

然而,我想要的是给予向量,id_vars <- c("age", "gender")covariates <- c("A", "B", "C")并让ddply获得id_vars的每个组合的协变量的均值 - 编码变量名称。我知道我可以用.(age, gender)替换id_vars,但我不知道如何采取措施。

1 个答案:

答案 0 :(得分:0)

您可以尝试dplyr

library(dplyr)
res <- df %>% 
          group_by_(.dots=id_vars) %>% 
          summarise_each_(funs(mean), covariates)

head(res,3)
#    age gender        A        B        C
#  1  20      F 39.35294 24.70588 3.235294
#  2  20      M 59.14286 25.35714 4.428571
#  3  21      F 54.19048 26.66667 3.809524

,其中

id_vars <- c("age", "gender")
covariates <- c("A", "B", "C")
相关问题