R - Как заменить значения переменной на имя переменной в dplyr - PullRequest
0 голосов
/ 16 мая 2018
library(tidyverse)
df = tribble(~a,~b,
             0 ,1,
             1 ,0)

Результат, который я хочу:

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

Как заменить значения именем переменной?

Ответы [ 2 ]

0 голосов
/ 16 мая 2018

Вы также можете попробовать, replace функция из BASE R: , печать 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))

EDIT :

Более общее решение для вышеуказанного вопроса:

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      
0 голосов
/ 16 мая 2018

Если нам нужно заменить 1 именами столбцов, а 0 - пустыми (""), и если столбцы являются только двоичными, мы можем использовать map2 для циклического перебора столбцов и соответствующих имен столбцов, а затем добавить 1 к столбцам и используйте его в качестве индекса для замены 1 на "" и 2 на соответствующие имена столбцов

library(tidyverse)
map2_df(df, colnames(df), ~  c('', .y)[.x +1])
# A tibble: 2 x 2
#   a     b    
#  <chr> <chr>
#1 ""    b    
#2 a     ""  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...