拥有包含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}}正在解决问题,但我不确定......) 我怎么解决这个问题??
任何评论都将不胜感激! :)
答案 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()