创建一个列变量,从R

时间:2017-11-06 16:25:07

标签: r

我有以下数据框:

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变量

中提取值

1 个答案:

答案 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