我正在处理类似以下的数据:
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()
函数,但是很明显它占用了前几行,而我的行在每一列中都是不同的,而且它不会“融化”另一个不同的字段,所以我想保留那个。
我不知道该怎么解决(老实说,这个问题的标题都没有)。您建议什么?预先感谢。
答案 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 R
和merge
的{{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