已经有一个类似的问题,答案有所帮助,但在lapply中使用聚合时,我无法将其转换为我的用例。使用setNames,我可以指定一个字符串,但是我很难拔出列名称,lapply目前正在使用setNames。
所以,我有一个df。
head(rms)
file date min fullband band1 band2 band3 band4 band5 hr
1 0 2015/1/14 0 112.17 112.43 94.13 97.92 102.17 96.87 0
2 1 2015/1/14 5 111.73 110.71 94.01 96.78 102.20 96.90 0
3 2 2015/1/14 10 109.08 107.05 91.81 96.68 102.40 97.01 0
4 3 2015/1/14 15 110.74 109.24 93.14 96.65 102.02 96.87 0
5 4 2015/1/14 20 108.82 107.09 93.16 96.50 102.08 96.84 0
我像这样汇总了fullband-band5列:
rms.byhr<-lapply(rms[-c(1:3,10)], function(x){
aggregate(x, by=list(rms$hr), mean)
})
但是,lapply自然会使用list name作为列表元素,并用任意的东西(Group.1和x)替换它创建的df的名称。
我试过了:
rms.byhr<-lapply(rms[-c(1:3,10)], function(x){
setNames(aggregate(x, by=list(rms$hr), mean), c("Hour", names(x))
})
和
rms.byhr<-lapply(rms[-c(1:3,10)], function(x){
setNames(aggregate(x, by=list(rms$hr), mean), c("Hour", names(rms)[which(names(rms)==names(x))]))
})
但这似乎不起作用并返回NA。所以我想我的问题是,“x”在lapply中是怎样的,如何正确地索引/取出名称?
我需要为后续功能命名。
答案 0 :(得分:0)
对我来说,完全清楚你想要的输出和格式。如果您想要list
,则可以将其打包在unname
:
rms.byhr<-lapply(rms[-c(1:3,10)], function(x) {
unname(aggregate(x, by=list(rms$hr), mean))
})
但是aggregate
也可以聚合多个列,这会导致lapply
不再需要:
aggregate(. ~ hr, data = rms[-(1:3)], mean)
编辑:我现在看到@Henrik已在评论中回复了您的帖子。我将把这个答案留给后人。