将两对具有重复值对的行合并为一行

时间:2019-01-04 23:39:05

标签: r

我下面有一个数据帧,其中有2行,列AB的值对相同-3RD AND 4RTH的2 3-,-7TH和8TH的4 6- 。

master <- data.frame(A=c(1,1,2,2,3,3,4,4,5,5), B=c(1,2,3,3,4,5,6,6,7,8),C=c(5,2,5,7,7,5,7,9,7,8),D=c(1,2,5,3,7,5,9,6,7,0))



A B C D
1  1 1 5 1
2  1 2 2 2
3  2 3 5 5
4  2 3 7 3
5  3 4 7 7
6  3 5 5 5
7  4 6 7 9
8  4 6 9 6
9  5 7 7 7
10 5 8 8 0

我想通过添加管道将这些行合并为一| CD值之间的运算符。例如,第二行和第三行是:

A B C  D
2 3 2|5 2|5

2 个答案:

答案 0 :(得分:1)

在您的示例中,我认为您的组合对逐行排列,假设是这种情况,这就是您要寻找的。我们将要折叠掉的列进行分组,然后使用summarize_allpaste0将值与分隔符组合起来。

library(tidyverse)

master %>% group_by(A,B) %>% summarize_all(funs(paste0(., collapse="|")))

      A     B C     D    
  <dbl> <dbl> <chr> <chr>
1     1     1 5     1    
2     1     2 2     2    
3     2     3 5|7   5|3  
4     3     4 7     7    
5     3     5 5     5    
6     4     6 7|9   9|6  
7     5     7 7     7    
8     5     8 8     0   

答案 1 :(得分:1)

我们可以在base R中使用aggregate

aggregate(.~ A + B, master, FUN = paste, collapse= '|')
#  A B   C   D
#1 1 1   5   1
#2 1 2   2   2
#3 2 3 5|7 5|3
#4 3 4   7   7
#5 3 5   5   5
#6 4 6 7|9 9|6
#7 5 7   7   7
#8 5 8   8   0