我有以下数据框:
df <- data.frame(ID1=c(1,NA,NA,NA,1,NA),ID2=c(NA,NA,1,NA,NA,NA),ID3=c(NA,1,NA,NA,NA,NA),ID4=c(NA,NA,NA,NA,NA,1),ID5=c(NA,NA,NA,NA,NA,NA))
show(df)
我想使用IDchoice
变量中的值创建一个新变量ID
。新数据框看起来像这样:
df2 <-data.frame(ID1=c(1,NA,NA,NA,1,NA),ID2=c(NA,NA,1,NA,NA,NA),ID3=c(NA,1,NA,NA,NA,NA),ID4=c(NA,NA,NA,NA,NA,1),ID5=c(NA,NA,NA,NA,NA,NA),IDchoice=c(1,3,2,NA,1,4))
show(df2)
这就是我的尝试:
for(i in 1:nrow(df)){
df[i,"IDchoice"] <- ifelse(df$ID1[i]=="1", 1,
ifelse(df$ID2[i]=="1", 2,
ifelse(df$ID3[i]=="1", 3,
ifelse(df$ID4[i]=="1", 4,
ifelse(df$ID5[i]=="1", 5,NA)))))
}
但似乎只从第一个ID
变量
答案 0 :(得分:0)
您可以使用apply
:
df2$IDchoice = apply(df, 1, function(x) ifelse(sum(!is.na(x))==0, NA, which(!is.na(x))))
<强>结果:强>
ID1 ID2 ID3 ID4 ID5 IDchoice
1 1 NA NA NA NA 1
2 NA NA 1 NA NA 3
3 NA 1 NA NA NA 2
4 NA NA NA NA NA NA
5 1 NA NA NA NA 1
6 NA NA NA 1 NA 4