Преобразование столбцов логического индикатора в однофакторный столбец - PullRequest
0 голосов
/ 22 октября 2018

Подобные вопросы были заданы несколько лет назад здесь .

Моя настройка немного отличается.Мои индикаторные переменные не являются «истинными» фиктивными переменными, потому что они перекрываются.

Я хотел бы сделать следующее:

# fake data
library(tibble)
dat <- tribble(
  ~"a", ~"b", ~"c",
  0,  0,   0,
  1, 0, 0,
  1, 1, 1
)
dat
#> # A tibble: 3 x 3
#>       a     b     c
#>   <dbl> <dbl> <dbl>
#> 1     0     0     0
#> 2     1     0     0
#> 3     1     1     1

# desired data
desired_col <- c("none", "a", "a,b,c")
cbind(dat, desired_col)
#>   a b c desired_col
#> 1 0 0 0        none
#> 2 1 0 0           a
#> 3 1 1 1       a,b,c

Создан в 2018-10-22 пакетом Представить (v0.2.0).

Обратите внимание, что имена столбцов вставляются как символьные значения в desired_col.Если значения отсутствуют, значение == none.Если присутствует несколько значений, значения разделяются ,.

1 Ответ

0 голосов
/ 22 октября 2018

Вот один из способов использования функций Tidyverse

library(tibble)
library(dplyr)
library(tidyr)
dat %>% 
  rowid_to_column() %>% # keep data for each row together
  gather("col", "val", -rowid) %>% 
  mutate(rowid=factor(rowid)) %>% 
  filter(val==1) %>% 
  group_by(rowid) %>% 
  summarize(desired=paste(col, collapse=",")) %>%  #collapse values
  complete(rowid, fill = list(desired="none")) # add "none" for empty groups

#   rowid desired
#   <fct> <chr>  
# 1 1     none   
# 2 2     a      
# 3 3     a,b,c  

Основная идея заключается в изменении формы данных, чтобы мы могли запускать функции групп, а не запускать функции над строками data.frame, что не так просто.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...