我想为norm1〜norm31创建循环。
norm1 = norm1 %>% group_by(ID_Pair) %>% summarize(Norm_avg_PCK=mean(ID_avg_PCK,na.rm=T)
, Norm_avg_BT=mean(ID_avg_BT, na.rm=T))
norm2 = norm2 %>% group_by(ID_Pair) %>% summarize(Norm_avg_PCK=mean(ID_avg_PCK,na.rm=T)
, Norm_avg_BT=mean(ID_avg_BT, na.rm=T))
我想如上所述创建norm1〜norm31。
我已经尝试过此代码,但是不断收到错误消息。
for (i in 1:31){
nam=paste("norm",i,sep="")
assign(nam,nam %>% group_by(ID_Pair) %>% summarize(Norm_avg_PCK=mean(ID_avg_PCK,na.rm=T)
, Norm_avg_BT=mean(ID_avg_BT, na.rm=T)))}
[错误] UseMethod(“ group_by_”)中的错误:没有适用于“ group_by_”的适用方法应用于“字符”类的对象
答案 0 :(得分:0)
可能有更好的方法来组织数据。但是如果您愿意,可以使用get()
来解决您的问题。
for (i in 1:31){
nam=get(paste("norm",i,sep=""))
assign(nam,nam %>% group_by(ID_Pair) %>% summarize(Norm_avg_PCK=mean(ID_avg_PCK,na.rm=T)
, Norm_avg_BT=mean(ID_avg_BT, na.rm=T)))
}
答案 1 :(得分:0)
首先,让我们将所有规范都放在一个列表中:
normlist<-lapply(paste0("norm",1:31),get)
现在,我们可以使用lapply
为每个规范做您的事情:
thing<-function(x) {x %>% group_by(ID_Pair) %>%
summarize(Norm_avg_PCK=mean(ID_avg_PCK,na.rm=T),
Norm_avg_BT=mean(ID_avg_BT, na.rm=T))}
lapply(normlist,thing)
带有伪造数据的示例:
a1<-data.frame(id=rep(letters[1:5],3),nums=1:15)
a2<-data.frame(id=rep(letters[6:10],3),nums=16:30)
alist<-lapply(paste0("a",1:2),get)
thing<-function(x) {x %>% group_by(id) %>% summarize(means=mean(nums))}
lapply(alist,thing)
[[1]]
# A tibble: 5 x 2
id means
<fct> <dbl>
1 a 6.
2 b 7.
3 c 8.
4 d 9.
5 e 10.
[[2]]
# A tibble: 5 x 2
id means
<fct> <dbl>
1 f 21.
2 g 22.
3 h 23.
4 i 24.
5 j 25.
如果要保留名称,可以将sapply
与simplify=FALSE
一起使用,而不要使用lapply
。