【问题标题】:Transform DF Column Values to Matrix in R将 DF 列值转换为 R 中的矩阵
【发布时间】:2018-11-17 19:38:53
【问题描述】:

我想根据基于日期的列计算分类变量的唯一值。

我希望将结果作为矩阵,其中列名是值分类变量,行名将是唯一的日期值,它们的单元格值是唯一计数。

以下链接按问题解决了分组问题,但我正在寻找转换后的 df:

How to add count of unique values by group to R data.frame

R: Extract unique values in one column grouped by values in another column

我的 df 有超过 50,000 行,看起来像:

dat <- data.frame(Date = c('06/08/2018','06/08/2018','07/08/2018','07/08/2018','08/08/2018','09/08/2018','09/08/2018','11/08/2018','11/08/2018','13/08/2018'),
                  Type= c('A','B','C','A','B','A','A','B','C','C'))

我希望我的结果矩阵将“A”、“B”、“C”作为新列,将“日期”作为行和矩阵中的值作为唯一计数,如下图所示:

此外,我们最好不要对分类值进行硬编码。所以,将来如果不是 3 而变成 4,那么代码会自动处理它。

【问题讨论】:

  • 您是否尝试过使用tidyr 包中的spread
  • 从未尝试过这些软件包。不是 R 方面的专家

标签: r matrix group-by aggregate


【解决方案1】:

这里使用spread

library(tidyverse)

spread_data <- (data, key = type, value = 2)

【讨论】:

    【解决方案2】:

    如何使用table...

    mat <- table(dat$Date, dat$Type)
    
    mat
    
                 A B C
      06/08/2018 1 1 0
      07/08/2018 1 0 1
      08/08/2018 0 1 0
      09/08/2018 2 0 0
      11/08/2018 0 1 1
      13/08/2018 0 0 1
    

    【讨论】:

      【解决方案3】:

      你要找的是dcast():

      dcast(dat, Date ~ Type, fun.aggregate = length, value.var = "Type")
      

      此函数将根据fun.aggregate 参数快速聚合您的数据(在您的情况下为length()

      【讨论】:

      • 在这种情况下不起作用。你想取后续列的平均值吗? IE。 A、B 和 C 的平均值?
      猜你喜欢
      • 1970-01-01
      • 2022-11-16
      • 2015-05-27
      • 1970-01-01
      • 2015-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-15
      相关资源
      最近更新 更多