在for循环中使用汇总时收到错误消息

时间:2016-11-01 13:15:25

标签: r dplyr

拥有包含244个数据框的列表。此列表名为d,d[[1]] year pos days sal 1 2009 A 31 2000 2 2009 B 60 4000 3 2009 C 10 600 4 2010 B 10 1000 5 2010 D 90 7000 看起来像这样。

 year   pos  days   sal
1 2009    B    101   6600
2 2010    D    100   8000

我想按年份对数据进行分组,添加天数和sal,并选择组中天数最多的pos。

结果如下:

library(dplyr)
ygroup<-group_by(d[[1]]$year)
summarise(ygroup, pos = pos[which.max(days)], days = sum(days), sal = sum(sal))

我知道如何在仅针对一个数据框的情况下执行此操作。 我是这样做的:

e<-list()
ygroup<-list()
for(i in 1:244){
ygroup[[i]]<-group_by(d[[i]]$year)
e[[i]]<-summarise(ygroup[[i]], pos = pos[which.max(days)], days = sum(days), sal = sum(sal))
}

但我想对列表d中的244个数据帧执行相同的操作。 我试过这个:

Error: expecting a single value

但这不起作用,出现错误。

pos = pos[which.max(days)]

(我认为这部分; {{1}}正在解决问题,但我不确定......) 我怎么解决这个问题??

任何评论都将不胜感激! :)

2 个答案:

答案 0 :(得分:4)

我们可以使用lapply匿名函数调用来遍历list data.frame s('d')

lapply(d, function(x) x %>% 
                       group_by(year) %>% 
                       summarise(pos = pos[which.max(days)], 
                                 days = sum(days), sal = sum(sal)))

答案 1 :(得分:1)

你的错误在e [[i]]&lt; - 你可能最好不要使用lapply而不是循环

ygroup<-lapply(ygroup,FUN=group_by,d$year)
e<-lapply(ygroup,FUN=summarise,pos = max(days), days = sum(days), sal = sum(sal))

这将返回一个列表,因此不需要e&lt; -list()