新列使用列名作为新列的值?

时间:2017-02-27 01:40:31

标签: r tidyr tidyverse

我有一个像下面这样的元素。看到它使用字符“Y”作为值。

require(tidyverse)
df <- data_frame(a = c('Y', NA, 'Y'), b = c(NA, 'Y', NA))
df

# A tibble: 3 × 2
      a     b
  <chr> <chr>
1     Y  <NA>    
2  <NA>     Y
3     Y  <NA>

我想创建一个新列,结合其他两个(或更多)但是更改“Y”以匹配列的名称。在这种情况下,“a”和“b”。比如这个

# A tibble: 3 × 3
      a     b    c
  <chr> <chr> <chr>
1     Y  <NA>    a
2  <NA>     Y    b
3     Y  <NA>    a

我非常有信心每一行中只有一个“Y”。我认为我无法使用gathermutate

解决此问题

1 个答案:

答案 0 :(得分:0)

我们可以将whicharr.ind=TRUE

一起使用
ind <- which(!is.na(df), arr.ind = TRUE)
df$c <- names(df)[ind[,2][order(ind[,1])]]
df$c
#[1] "a" "b" "a"