在 R 中根据条件创建唯一组合的变量

Create variable of unique combinations based on condition in R

提问人:Mark Noble 提问时间:12/10/2022 最后编辑:Mark Noble 更新时间:12/10/2022 访问量:52

问:

在以下数据帧中

structure(list(model = c("A1", "A1", "B4", "B4", "B4", "A4", 
"A4", "A4", "G4", "G4"), category = c("X", "Y", "X", "Y", "Z", 
"X", "Y", "Z", "X", "Z"), sale = c(194L, 0L, 59L, 29L, 0L, 176L, 
88L, 0L, 87L, 44L)), class = "data.frame", row.names = c(NA, 
-10L))


   model category sale
1     A1        X  194
2     A1        Y    0
3     B4        X   59
4     B4        Y   29
5     B4        Z    0
6     A4        X  176
7     A4        Y   88
8     A4        Z    0
9     G4        X   87
10    G4        Z   44

类别变量包括唯一值:X、Y 或 Z。我需要创建模型和类别变量的所有可能组合;其中一些已经存在,但例如梳子。of: A1 - Z 缺失。因此,我需要完成缺少组合的表。

销售列需要遵循给定的规则:

  1. 如果缺少与 Z 的组合(例如 A1-Z),则销售与 model-Y(即 A1-Y)相同
  2. 如果缺少 Y 的组合(例如 A1-Y),则销售与 model-X 相同(例如 A1-X

预期输出:

   model category sale
     A1        X  194
     A1        Y    0
     A1        Z    0
     B4        X   59
     B4        Y   29
     B4        Z    0
     A4        X  176
     A4        Y   88
     A4        Z    0
     G4        X   87
     G4        Z   44
     G4        Y   87
R 循环 if 语句 dplyr 切片

评论

0赞 IRTFM 12/10/2022
与 expand.grid(,) 合并,在唯一值上完成。可以肯定的是,SO上已经有工作的例子了。
0赞 Mark Noble 12/10/2022
找不到任何解决方案

答:

0赞 Chamkrai 12/10/2022 #1

有点快速和肮脏的方法。

df %>% 
  complete(model, category) %>%  
  mutate(sale = if_else(is.na(sale), lag(sale), sale))

# A tibble: 12 × 3
   model category  sale
   <chr> <chr>    <int>
 1 A1    X          194
 2 A1    Y            0
 3 A1    Z            0
 4 A4    X          176
 5 A4    Y           88
 6 A4    Z            0
 7 B4    X           59
 8 B4    Y           29
 9 B4    Z            0
10 G4    X           87
11 G4    Y           87
12 G4    Z           44

评论

0赞 Mark Noble 12/10/2022
你能解释一下这条线吗:mutate(sale = if_else(is.na(sale), lag(sale), sale))。特别是,为什么我们使用 lag(sale)
0赞 Chamkrai 12/10/2022
使用 时生成 NA。用你的条件来填充它;如果存在 NA,则取其上方的值,如果 Z 为 NA/0,则 Z 取 Y。complete()
0赞 Mark Noble 12/10/2022
但是,如果 X、Y Z 有随机字符呢?
0赞 Chamkrai 12/10/2022
@MarkNoble 那可能行不通,我只是以一种懒惰的方式解决了这个问题。
0赞 Mark Noble 12/10/2022
对不起,我不能接受这个答案。我需要更通用的代码线