【问题标题】:loop over data frame column by names in R按R中的名称循环数据框列
【发布时间】: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 还是运行/条件平均值?请用期望的结果来说明。

标签: r dataframe


【解决方案1】:

非常感谢 Roman Luštrik 的评论。

代码是,

for(i in 1:a){
col_formula <- as.formula(sprintf("target ~ %s", colnames(df)[i]))
aggregate(col_formula, data=df,  FUN=mean)
}

它给出了我正在寻找的结果。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-28
    • 2011-11-22
    相关资源
    最近更新 更多