我需要修改其他人编写的一些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
,但我不知道如何采取措施。
答案 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")