将多个列合并到R中的一列中

时间:2015-12-17 22:49:45

标签: r dataframe

我的数据框看起来像“

print(dat)
A  B  C
1  NA NA
NA 1  NA
1  NA NA
NA NA 1

可复制:

dat <- data.frame(A=c(1,NA,1,NA), B=c(NA,1,NA,NA), C=c(NA,NA,NA,1))

因此,如果在给定列中找到1,则另外两列将具有NA。我正在尝试将此信息合并到一列中,因此它看起来像:

print(dat)
A
B
A
C

我试过了:

dat<-ifelse(dat$A==1,"A",ifelse(dat$B==1,"B",ifelse(dat$C==1,"C","NA")))

但它不起作用。有什么建议?谢谢!

5 个答案:

答案 0 :(得分:4)

试试这个:

rep(names(dat),nrow(dat))[c(t(dat)) == 1 & !is.na(c(t(dat)))]
[1] "A" "B" "A" "C"

答案 1 :(得分:3)

max.col是这些任务的赢家:

colnames(dat)[max.col(!is.na(dat))]
#[1] "A" "B" "A" "C"

答案 2 :(得分:2)

另一种方式:

> t(dat) %>% melt() %>% na.omit() %>% select(X1)
   X1
1   A
5   B
7   A
12  C

答案 3 :(得分:2)

另一种选择是

names(dat)[+(!is.na(dat)) %*% seq_along(dat)]
#[1] "A" "B" "A" "C"

答案 4 :(得分:1)

要添加到现有选项,请尝试:

IReadOnlyList