簡體   English   中英

循環錯誤:替換長度為零

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM