我遇到了部分代碼的麻煩。我是一個初學者,我試圖做一個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