繁体   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