R - 如何用dplyr中的变量名替换变量的值

时间:2018-05-16 03:09:15

标签: r dplyr

library(tidyverse)
df = tribble(~a,~b,
             0 ,1,
             1 ,0)

我想要的结果:

 a  b
'' 'b'
'a' ''

如何使用变量名称替换值?

2 个答案:

答案 0 :(得分:2)

如果我们需要用列名替换1,用空格("")替换0,如果列只是二进制,我们可以使用map2遍历列和相应的列名称,然后将1添加到列并将其用作索引以将{1}替换为1,将2替换为相应的列名

""

答案 1 :(得分:2)

您也可以尝试 BASE R:中的replace功能,打印nwdf1,您将获得最终答案。

nwdf <- replace(df,df == 1,names(df))
nwdf1 <- replace(nwdf, nwdf==0, '')

df是:

structure(list(a = c(0, 1), b = c(1, 0)), .Names = c("a", "b"
), class = c("tbl_df", "tbl", "data.frame"), row.names = c(NA, 
-2L))

修改

针对上述问题的更通用的解决方案:

outputdf <-  data.frame(sapply(names(df), function(x)ifelse(df[,x] == 1, x, '')), stringsAsFactors=F)

<强>输出

 # A tibble: 2 x 2
      a     b
  <chr> <chr>
1           b
2     a