我有一个分组的df
,我想在与df中的变量(item_code
)匹配的组的顶部添加其他行。
其他行没有id
列。在df
的组中不应重复其他行。
示例数据:
df <- as.tibble(data.frame(id=rep(1:3,each=2),
item_code=c("A","A","B","B","B","Z"),
score=rep(1,6)))
additional_rows <- as.tibble(data.frame(item_code=c("A","Z"),
score=c(6,6)))
我尝试过的事情
我找到了这篇文章,并尝试将其应用: Add row in each group using dplyr and add_row()
df %>% group_by(id) %>% do(add_row(additional_rows %>%
filter(item_code %in% .$item_code)))
我得到的:
# A tibble: 9 x 3
# Groups: id [3]
id item_code score
<int> <fct> <dbl>
1 1 A 6
2 1 Z 6
3 1 NA NA
4 2 A 6
5 2 Z 6
6 2 NA NA
7 3 A 6
8 3 Z 6
9 3 NA NA
我正在寻找什么:
# A tibble: 6 x 3
id item_code score
<int> <fct> <dbl>
1 1 A 6
2 1 A 1
3 1 A 1
4 2 B 1
5 2 B 1
6 3 B 1
7 3 Z 6
8 3 Z 1
答案 0 :(得分:2)
这应该可以解决问题:
library(plyr)
df %>%
join(subset(df, item_code %in% additional_rows$item_code, select = c(id, item_code)) %>%
join(additional_rows) %>%
subset(!duplicated(.)), type = "full") %>%
arrange(id, item_code, -score)
不确定它是否是最好的方法,但它是否有效
编辑:要以相同的顺序获得分数,请添加其他排列项
编辑2:好了,现在您的注释中应该不再有从其他行中添加重复行了