以某些列值为条件添加新的/排序的重复行

  • 本文关键字:排序 添加 条件 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为每种组合提供了一个数据集,这符合我的目的。诸如color_blue=1color_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

实际上会发生两件事:

  1. 如果某些名称相似的变量(不是一个范围,因为这可能会改变(,则添加行作为重复项>0
  2. 重命名"的值;汽车-变量由保留的那个变量的某一部分决定

我知道可能有很多管道使用dplyr或tidyverse之类的解决方案。由于我没有使用这些,我对它们非常不熟悉,将它们应用于我的数据将更加困难。但最终:任何解决方案都将是进步。

这是有效的:

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))

最新更新