如何在一列R中连续分组相同值的值?

时间:2016-05-30 12:06:32

标签: r data-cleansing data-cleaning

我尝试对数据集进行排序,但我对此有点失落。我已完成其他所有工作,数据过滤,重复值消除,按日期排序......但我坚持这一点,也许是最简单的部分之一。我的目标是转换此数据框:

Type    Value
A        12
B        20
A        14
A        13
B        15

对于这样的事情:

A   12,14,13
B   20,15

关于如何做到这一点的任何想法?

提前致谢!

4 个答案:

答案 0 :(得分:5)

使用base是最简单的:

aggregate(df$Value~df$Type,FUN=c)

  df$Type   df$Value
1       A 12, 14, 13
2       B     20, 15

使用FUN = c将Value类型保持为数字(实际上是数字向量),这比转换为String更好imho

但是....如果不再需要转换并且你想将上面保存为CSV - 你想要转换为String:

write.csv(x = aggregate(df$Value~df$Type,FUN=toString),file = "nameMe")

工作正常。

答案 1 :(得分:4)

我们可以使用aggregate

中的base R
aggregate(Value~., df1, FUN= toString)
#   Type      Value
#1    A 12, 14, 13
#2    B     20, 15

答案 2 :(得分:2)

使用data.table的另一种选择:

假设:data.frame存储在变量df中。

library(data.table)

setDT(df)

df[,.(Value = paste(Value,collapse=',')),.(Type)]

答案 3 :(得分:1)

您可以使用tidyr库。

> library(tidyr)
> spread(df, Type, Value)
   A  B
1 12 NA
2 NA 20
3 14 NA
4 13 NA
5 NA 15