У меня есть набор данных с 6 столбцами:

dataset

Alpha1 <- c(NA,'Place', NA, NA, 'Service')
Rating1 <- c(NA, 5, NA, NA, 5)
Alpha2 <- c(NA,'Rooms', NA, NA, 'Place')
Rating2 <- c(NA, 5, NA, NA, 3)
Alpha3 <- c(NA,'Service', NA, NA, 'Rooms')
Rating3 <- c(NA, 4, NA, NA, 0)

df <- data.frame(Alpha1, Rating1, Alpha2, Rating2, Alpha3, Rating3)

Я пытаюсь использовать имена в полях Alpha1, Alpha2 и Alpha3 для создания новых столбцов, но с учетом каждого наблюдения. Результат должен быть:

result

1
AleG 8 Фев 2021 в 16:12

1 ответ

Лучший ответ

Попробуйте следующее.

  df %<>% .[complete.cases(.), ]
> df
   Alpha1 Rating1 Alpha2 Rating2  Alpha3 Rating3
2   Place       5  Rooms       5 Service       4
5 Service       5  Place       3   Rooms       0

Код

  cmbs <- list(df[, 1:2], df[, 3:4], df[,5:6]) %>%  
                          lapply(., function(x) setNames(x, c("Alpha", "Rating"))) %>% 
                               purrr::reduce(full_join, by = "Alpha") %>% 
                                                 data.table::transpose(.) %>% 
                                                    setNames(., .[1,]) %>% 
                                                       slice(-1)

Вывод

  Place Service Rooms
1     5       5  <NA>
2     3    <NA>     5
3  <NA>       4     0
1
Taufi 8 Фев 2021 в 14:13