R:除一个单元格外,具有唯一的行,如何获得保持差异的唯一行

时间:2018-07-02 15:26:36

标签: r

我正在处理类似以下的数据:

df <- data.frame(
      point = c('a','b','b','c'),
      value =c(1,2,2,3),
      x_p2=c(5,6,6,7),
      y_p2 =c(3,4,4,3),
      date =c(1,4,4,7),
      variable =c(4,3,3,1),
     other =c('x','zz','zk','x')
                )

> df
  point value x_p2 y_p2 date variable other
1     a     1    5    3    1        4     x
2     b     2    6    4    4        3    zz
3     b     2    6    4    4        3    zk
4     c     3    7    3    7        1     x

如您所见,除第二行和第三行外,每一行都是唯一的,仅对于other列而言,它们是不同的。
我想拥有的结果是唯一的,但合并了不常见的结果:更明确地说,我想获得以下结果:

  point value x_p2 y_p2 date variable other
1     a     1    5    3    1        4     x
2     b     2    6    4    4        3    zz/zk
3     c     3    7    3    7        1     x

我尝试使用unique()函数,但是很明显它占用了前几行,而我的行在每一列中都是不同的,而且它不会“融化”另一个不同的字段,所以我想保留那个。
我不知道该怎么解决(老实说,这个问题的标题都没有)。您建议什么?预先感谢。

3 个答案:

答案 0 :(得分:2)

通过使用dplyr

df%>%group_by( point,value,x_p2,y_p2,date,variable)%>%dplyr::summarise(other=paste(other,collapse='/'))
# A tibble: 3 x 7
# Groups:   point, value, x_p2, y_p2, date [?]
   point value  x_p2  y_p2  date variable other
  <fctr> <dbl> <dbl> <dbl> <dbl>    <dbl> <chr>
1      a     1     5     3     1        4     x
2      b     2     6     4     4        3 zz/zk
3      c     3     7     3     7        1     x

答案 1 :(得分:1)

这里是base Rmerge的{​​{1}}选项。删除最后一列,以获取unique行,并用unique ed'other'merge by'point'

paste

如果我们想保留为aggregated列,可以通过merge(unique(df[-ncol(df)]), aggregate(other ~ point, df, paste, collapse="/")) # point value x_p2 y_p2 date variable other #1 a 1 5 3 1 4 x #2 b 2 6 4 4 3 zz/zk #3 c 3 7 3 7 1 x

完成
list

或与summarise

library(tidyverse)
df %>% 
    group_by_at(vars(names(.)[1:6])) %>% 
    summarise(other = list(other))

答案 2 :(得分:1)

 aggregate(df,list(do.call(paste,df[-7])),function(x)unique(x))[-1]
  point value x_p2 y_p2 date variable  other
1     a     1    5    3    1        4      x
2     b     2    6    4    4        3 zz, zk
3     c     3    7    3    7        1      x