我下面有一个数据帧,其中有2行,列A
和B
的值对相同-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
我想通过添加管道将这些行合并为一| C
和D
值之间的运算符。例如,第二行和第三行是:
A B C D
2 3 2|5 2|5
答案 0 :(得分:1)
在您的示例中,我认为您的组合对逐行排列,假设是这种情况,这就是您要寻找的。我们将要折叠掉的列进行分组,然后使用summarize_all
和paste0
将值与分隔符组合起来。
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