【发布时间】:2016-03-21 22:00:16
【问题描述】:
我有一个数据框,每一列都是一个分类变量,还有一个名为 target 的列,其值为 0 或 1。 我正在尝试按列循环数据框,并按每列的不同级别计算平均目标。
n = c(2, 2, 1)
s = c(1, 0, 1)
b = c(TRUE, FALSE, TRUE)
target = c(1,0,0)
df = data.frame(n, s,b,target)
for(i in 1:a){
aggregate(df$target ~ as.name(colnames(df)[1]), df, mean)
}
看来这里我不能只替换 n in
aggregate(df$target ~ n, df, mean)
带字符串。如何解决这类问题?非常感谢。
【问题讨论】:
-
你应该创建一个公式
aggregate(target ~ n, data = df, FUN = mean)。您可以使用例如sprintf来构建呼叫,例如as.formula(sprintf("target ~ %s", colnames(df)[i])). -
lapply(df[,-4], function(x){aggregate(target ~ x, data = df, FUN = mean)})? -
您需要多个聚合 dfs 还是运行/条件平均值?请用期望的结果来说明。