【问题标题】:dplyr and for loop in rr 中的 dplyr 和 for 循环
【发布时间】:2015-11-26 22:46:33
【问题描述】:

所以问题来了:我想在我的 R 代码中使用 for 循环来总结不同的列。

作为一个例子,它可能看起来像这样:

all.columns<-c("column4","column5","column6","column7")
for (i in 1:4) {  
df%>%
 group_by(column3)%>%
 summarise(Mean=mean(all.columns[i]),
           Max=max(all.columns[i]))
} 

其中 df 是一个数据框,column3 可以是按 Year 变量分组,第 5 到 7 列是我想用相同的代码重复检查的那些。

您知道如何使用 dplyr 执行此操作吗?如果您有没有 dplyr 的替代方案,我很想听听。

我试过放列的字符名,但是不行……

【问题讨论】:

  • 也许在末尾添加一个%&gt;% print。我不太清楚你想做什么。示例数据可能会有所帮助。
  • 请添加一些与您心目中的结构相匹配的示例数据,理想情况下,是所需输出的说明。照原样,我无法判断您的分组变量是否跨行重复,是否必须处理缺失值等。
  • 你想要的输出是什么?你想要对象,每一列的摘要都有一个数据框吗?使用字符串列名,您需要使用标准评估summarise_()...有a whole vignette on the topic。或者也许查看summarize_each 并为自己获取一个没有任何循环的大型摘要数据框。
  • 感谢 Gregor,这正是最简单的方法! summarise_each(funs(mean, max), column4,column5,column6) stackoverflow.com/questions/21644848/…

标签: r for-loop dplyr


【解决方案1】:

这个怎么样:

假数据:

df <- data.frame(column3=rep(letters[1:2], 10), 
                 column4=rnorm(20),
                 column5=rnorm(20),
                 column6=rnorm(20),
                 column7=rnorm(20))

dplyr解决方案:

library(dplyr)
df %>% 
  group_by(column3) %>% 
  summarise_each(funs(mean, max), column4:column7)

输出:

Source: local data frame [2 x 9]

  column3 column4_mean column5_mean column6_mean column7_mean column4_max column5_max
1       a     0.186458   0.02662053  -0.00874544    0.3327999    1.563171    2.416697
2       b     0.336329  -0.08868817   0.31777871    0.1934266    1.263437    1.142430
Variables not shown: column6_max (dbl), column7_max (dbl)

【讨论】:

  • 这真是太棒了!谢谢。正是我要搜索的内容!
【解决方案2】:

这不起作用,因为当您将列名存储为字符时,它们就像是对象一样调用列名。

我知道这可以通过data.table 完成:

dt = data.table(df)
dt[, lapply(.SD, function(x) data.table(mean(x), max(x))),
    by = column3, .SDcols = all.columns]

【讨论】:

    猜你喜欢
    • 2019-07-28
    • 1970-01-01
    • 2021-08-05
    • 1970-01-01
    • 2018-05-02
    • 2016-10-15
    • 1970-01-01
    • 2017-01-09
    • 1970-01-01
    相关资源
    最近更新 更多