我遇到了部分代码的麻烦。我是一个初学者,我试图做一个for循环与列表来构造不同的data.frame。让我们来看看在for循环中使用列表
df<-data
head(data)
col1 col2 col3
A 1 13
A 2 34
A 2 46
B 1 23
D 3 56
B 2 31
df_a<-data[which(data$col1=="A")
df_b<-data[which(data$col1=="B")
df_c<-data[which(data$col1=="C")
df_d<-data[which(data$col1=="D")
list<-c("_a","_b","_c","_d")
for (i in list){
paste0("df",i,"1")<-data(which(paste0("df",i)$col2==1))
paste0("df",i,"2")<-data(which(paste0("df",i)$col2==2))
paste0("df",i,"3")<-data(which(paste0("df",i)$col2==3))
在这种情况下,我们的目标是用我的原始数据帧构建不同的数据帧。在这种情况下,它可能看起来有点棘手,但即使语法相似,我也不会使用这种方式。
问题是粘贴数据框名称和“$”的问题。 R返回一条错误消息:
Error in which(paste0("df", i, "1")$col2 == 1) : erreur d'évaluation de l'argument 'x' lors de la sélection d'une méthode pour la fonction 'which' : Error in paste0("df", i, "1")$col2 : $ operator is invalid for atomic vectors
你有一个想法,以解决这个问题呢?
你缺少一个右括号在你的代码,它应该是像'df_a <-data [which(data $ col1 ==“A”),]'',和b,c和d相同。 – jdb
只是'过滤器(nrow,split(df,list(df $ col1,df $ col2)))'应该足够了 – Sotos