提问人:Mark Noble 提问时间:12/10/2022 最后编辑:Mark Noble 更新时间:12/10/2022 访问量:52
在 R 中根据条件创建唯一组合的变量
Create variable of unique combinations based on condition in R
问:
在以下数据帧中
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 缺失。因此,我需要完成缺少组合的表。
销售列需要遵循给定的规则:
- 如果缺少与 Z 的组合(例如 A1-Z),则销售与 model-Y(即 A1-Y)相同
- 如果缺少 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
答:
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
对不起,我不能接受这个答案。我需要更通用的代码线
评论