如何用R将列中相同值的行值分组? [复制]
Posted
技术标签:
【中文标题】如何用R将列中相同值的行值分组? [复制]【英文标题】:How to group in a row values of the same value in a column with R? [duplicate] 【发布时间】:2016-09-28 06:14:24 【问题描述】:我正在尝试对数据集进行排序,但对此我有点迷茫。我已经完成了所有其他工作,数据过滤,消除重复值,按日期排序......但我坚持这一点,也许是最简单的部分之一。我的目标是转换这个数据框:
Type Value
A 12
B 20
A 14
A 13
B 15
这样的:
A 12,14,13
B 20,15
你知道怎么做吗?
提前致谢!
【问题讨论】:
试试aggregate(Value~Type, df1, FUN= toString)
【参考方案1】:
使用base最简单:
aggregate(df$Value~df$Type,FUN=c)
df$Type df$Value
1 A 12, 14, 13
2 B 20, 15
使用 FUN=c 将值类型保持为数字(实际上是数字向量),这比转换为字符串更好
然而....
write.csv(x = aggregate(df$Value~df$Type,FUN=toString),file = "nameMe")
工作正常。
【讨论】:
这可行,但我无法将结果写入 CSV 文档。它可以写成“类似csv”的文档还是纯文本?当我尝试编写 csv 时,我收到此消息:“Error inn .External2(C_writetable, x, file, nrow(x), p, rnames, sep, eol, : not implemented type 'list' in 'EncodeElement'跨度> 【参考方案2】:我们可以使用来自base R
的aggregate
aggregate(Value~., df1, FUN= toString)
# Type Value
#1 A 12, 14, 13
#2 B 20, 15
【讨论】:
【参考方案3】:使用data.table
的另一种选择:
假设:data.frame 存储在变量 df 中。
library(data.table)
setDT(df)
df[,.(Value = paste(Value,collapse=',')),.(Type)]
【讨论】:
【参考方案4】:您可以使用tidyr
库。
> library(tidyr)
> spread(df, Type, Value)
A B
1 12 NA
2 NA 20
3 14 NA
4 13 NA
5 NA 15
【讨论】:
以上是关于如何用R将列中相同值的行值分组? [复制]的主要内容,如果未能解决你的问题,请参考以下文章