【问题标题】:Add new/sort-of-duplicate rows conditional on certain column values根据某些列值添加新的/重复的行
【发布时间】:2021-01-11 15:42:37
【问题描述】:

对数据集的以下结构进行图像化。

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

实际上会发生两件事:

  1. 如果某些类似命名的变量(不是范围,因为可能会改变)添加行作为重复排序 > 0
  2. 重命名“car”变量的值 - 由保留的变量的特定部分。

我知道可能有很多使用 dplyr 或 tidyverse 的管道解决方案。由于我没有使用它们,因此我对它们非常不熟悉,并且将有(更难)时间将它们应用于我的数据。但归根结底:任何解决方案都是进步的。

【问题讨论】:

  • 没有人吗?哦,伙计..

标签: r


【解决方案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))

【讨论】:

    猜你喜欢
    • 2021-11-03
    • 1970-01-01
    • 2017-11-09
    • 2020-10-19
    • 2022-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-14
    相关资源
    最近更新 更多