#r
#r
Вопрос:
Представьте следующую структуру набора данных.
DF <- expand.grid(car=c("BMW","TESLA", "Mercedes"),
id=c("id1","id2","id3"),
id2=c("idA","idB"),
color_blue=c(0,1),
color_red=c(0,1),
color_black=c(0,1,2),
color_white=c(0,1),
tech_radio=c(0,1),
comf_heat=c(0,1),
stringsAsFactors=TRUE)
expand.grid предоставляет набор данных с каждой комбинацией, что служит моей цели здесь. Возможны такие комбинации, как colour_blue= 1 и colour_red= 1, которые я хочу разделить, когда они появятся.
Я хочу пойти отсюда:
car id id2 color_blue color_red color_black color_white tech_radio comf_heat
BMW id1 idA 1 1 1 0 1 2
туда
car id id2 color_blue color_red color_black color_white tech_radio comf_heat
BMW_blue id1 idA 1 0 0 0 1 2
BMW_red id1 idA 0 1 0 0 1 2
BMW_black id1 idA 0 0 1 0 1 2
По сути, должны произойти две вещи:
- добавление строк в качестве дубликатов, если некоторые переменные с одинаковыми именами (не диапазон, поскольку это может измениться)> 0
- переименуйте значение переменной «car» на определенную часть той переменной, которая сохраняется.
Я знаю, что, возможно, существует множество решений, использующих каналы, с dplyr или tidyverse или около того. Поскольку я их не использую, я с ними не знаком, и мне будет (сложнее) применить их к моим данным. Но в конце концов: любое решение будет прогрессом.
Комментарии:
1. никто? о боже..
Ответ №1:
Это работает:
DF_test <- DF %>%
pivot_longer(cols = starts_with('color'), names_to='color') %>%
filter(value==1) %>%
mutate(color=gsub(color, pattern = 'color_', replacement = ''),
code_together=paste(car, color, sep = '_')) %>%
select(-c(color, car))