我已经生成了以下假设数据集:
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行中的“Self”改为“Son”。数据收集过程中可能发生的一些小错误。
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行,其中'Self'未指定?
由于
答案 0 :(得分:1)
你必须动态处理错误,例如:
for(i in 1:nrow(df)) {
print(i)
a<-which(df[i,]=="Self")+1
if(length(a)>0)
df[i,2]<-df[i,a]
}
或者您可以预先处理以删除有错误的行。