[英]Error in loops: replacement has length zero
我生成了以下假設數據集:
df<-data.frame(read.table(header = TRUE, stringsAsFactors = FALSE, text = "
ID Age Rel_1 Age_1 Rel_2 Age_2 Rel_3 Age_3
1 . Self 12 Dad 40 Mom 38
2 . Dad 50 Mom 50 Self 22
3 . Granddad 75 Mom 40 Self 15
4 . Dad 45 Self 15 Mom 44
5 . Mom 50 Sister 18 Self 22
"))
讓每一行代表參與調查的受訪者。 讓列Rel_1至Age_3代表調查對象的家庭成員。 “ Rel”代表關系。 我想從這個家庭花名冊中檢索調查對象的年齡。 標記“自我”確實向我表明了這一點。 因此,如果“ Self”在Rel_2中,那么我知道調查受訪者的年齡是12歲。
我想出了一種方法:
for(i in 1:nrow(df)) {
print(i)
a<-which(df[i,]=="Self")+1
df[i,2]<-df[i,a]
}
工作正常。
但是,現在讓我們在收集的數據中加入一個錯誤。 我將第3行中的“自我”更改為“兒子”。 在數據收集過程中可能會發生一些小錯誤。
df<-data.frame(read.table(header = TRUE, stringsAsFactors = FALSE, text = "
ID Age Rel_1 Age_1 Rel_2 Age_2 Rel_3 Age_3
1 . Self 12 Dad 40 Mom 38
2 . Dad 50 Mom 50 Self 22
3 . Granddad 75 Mom 40 Son 15
4 . Dad 45 Self 15 Mom 44
5 . Mom 50 Sister 18 Self 22
"))
如果現在運行我以前的代碼來提取年齡信息。 我收到以下錯誤消息:
[<-.data.frame
(*tmp*
,i,2,value = list())中的錯誤:替換長度為零
實際上,它僅提取有關年齡的信息直到第2行。它似乎並沒有跳過第3行,而是再次提取了第4和5行中的關於年齡的信息。
誰有一些想法出了什么問題,我該怎么做以“跳過”未指定“自我”的第3行?
謝謝
您必須隨時處理錯誤,例如:
for(i in 1:nrow(df)) {
print(i)
a<-which(df[i,]=="Self")+1
if(length(a)>0)
df[i,2]<-df[i,a]
}
或者,您可以先進行預處理以刪除有錯誤的行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.