R 基于部分复制的数据帧行合并

R 基于部分复制的数据帧行合并,r,dataframe,duplicates,R,Dataframe,Duplicates,我有一个数据帧df,其中一些行包含相同的值,但有一行不包含 V1 V2 V3 a b c a b d 1 2 3 1 2 4 我想删除那些包含df$V1和df$V2相同值的行,然后使用“;”作为分隔符组合V3中的值,如下所示: V1 V2 V3 a b c;;d 1 2 3;;4 谢谢 基于tidyverse的解决方案可以如下所示 library(dplyr) librar

我有一个数据帧df,其中一些行包含相同的值,但有一行不包含

V1    V2    V3
a     b     c
a     b     d
1     2     3
1     2     4
我想删除那些包含df$V1和df$V2相同值的行,然后使用“;”作为分隔符组合V3中的值,如下所示:

V1    V2    V3
a     b     c;;d
1     2     3;;4

谢谢

基于tidyverse的解决方案可以如下所示

library(dplyr)
library(stringr)

df %>%
  group_by(V1, V2) %>%
  mutate(V3 = if_else(n() > 1, str_c(V3, collapse = ';;'), V3[1])) %>%
  ungroup() %>%
  distinct()

#   V1    V2    V3   
#   <chr> <chr> <chr>
# 1 a     b     c;;d 
# 2 1     2     3;;4
为此,您可以使用聚合函数,并将paste作为聚合函数传递:

aggregate(V3~V1+V2, df, FUN=function(x){paste(x, collapse=';;')})
临时函数定义是将折叠参数指定为您的特殊选择所必需的

aggregate(V3~V1+V2, df, FUN=function(x){paste(x, collapse=';;')})