library(tidyverse)
df = tribble(~a,~b,
0 ,1,
1 ,0)
我想要的结果:
a b
'' 'b'
'a' ''
如何使用变量名称替换值?
答案 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