【问题标题】:How to group in a row values of the same value in a column with R? [duplicate]如何用R将列中相同值的行值分组? [复制]
【发布时间】: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)

标签: r data-cleaning


【解决方案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 Raggregate

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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-01-16
        • 2019-05-15
        • 2011-04-09
        相关资源
        最近更新 更多