R使用dplyr将行添加到分组的df中

时间:2018-11-27 11:23:59

标签: r dplyr

我有一个分组的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 

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:好了,现在您的注释中应该不再有从其他行中添加重复行了