Замените значение именем столбца для многих столбцов, используя R и dplyr - PullRequest
0 голосов
/ 26 мая 2018

Я преобразую результаты опроса, включая ответы с несколькими вариантами ответов.Исходные данные выглядят следующим образом:

df <- data_frame(
  id = c("a", "b", "c"),
  tired = c(T, F, T),
  lonely = c(F, F, T),
  excited = c(F, T, T)
)

df
# A tibble: 3 x 4
  id    tired lonely excited
  <chr> <lgl> <lgl>  <lgl>  
1 a     TRUE  FALSE  FALSE  
2 b     FALSE FALSE  TRUE   
3 c     TRUE  TRUE   TRUE   

Я хотел бы создать новый столбец «чувства», содержащий значения чувств, выраженные респондентом через запятую:

  id    feelings              
  <chr> <chr>                 
1 a     tired, excited        
2 b     excited               
3 c     tired, lonely, excited

Anпромежуточным шагом будет замена значений ИСТИНА соответствующим именем столбца, чтобы получить:

  id    tired  lonely   excited
  <chr> <lgl>  <lgl>    <lgl>  
1 a     tired          excited  
2 b                    excited   
3 c     tired  lonely  excited   

Для отдельного столбца это просто.Однако, в отличие от примера, в моем фрейме данных много столбцов (10+, обычно не более одного или двух ИСТИННЫХ значений), и поэтому я хотел бы автоматизировать это для нескольких столбцов.Вероятно, одним из решений будет циклическая переброска столбцов и использование поднабора и замены базы, но есть ли для этого элегантный способ dplyr / tidy?

Спасибо за помощь!

1 Ответ

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

Можно использовать tidyr::gather, а затем суммировать, используя dplyr:

library(dplyr)
library(tidyr)
df %>% gather(feelings, value, -id) %>%  #Change to long format
  filter(value) %>%  #Filter for value which are TRUE
  group_by(id) %>%
  summarise(feelings= paste0(feelings,collapse=","))  

# id    feelings
# <chr> <chr>               
# 1 a     tired               
# 2 b     excited             
# 3 c     tired,lonely,excited
...