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