【问题标题】:How to aggregate the data that have three dimensions?如何聚合具有三个维度的数据?
【发布时间】:2020-01-29 21:43:56
【问题描述】:

数据处理后,我有一个类似这样的数据集:

你可以在这里找到数据集:http://www.sharecsv.com/s/361731b8a7236a8ae147584e44518872/dfk.csv

如果您无法访问数据,这里有一个示例:

dfk <- tribble(
  ~group,           ~date,       ~id,         ~share,       ~status,
'FALSE',        'January 20',   '25092',   '0,050904271%',   'A',     
'NA',           'April 19',     '29374',   '60,584652862%',  'B',     
'TRUE',         'January 20',   '22625',   '87,401561145%',  'B',     
'TRUE',         'January 20',   '315618',  '99,697519661%', 'A',     
'FALSE & TRUE', 'January 20',   '31002',   '100%         ',  'C',     
'TRUE',         'April 19',     '21788',   '99,836975729%',  'A',     
'TRUE',         'January 20',   '1362',    '76,418519990%',  'A',     
'NA',           'January 20',   '29374',   '59,873882219%',  'C',     
'TRUE',         'April 19',     '9961',    '45,869691681%',  'A',     
'FALSE',        'January 20',   '62184',   '33,833598912%',  'A', 
)

在数据集中,只有两个日期:4 月 19 日和 1 月 20 日。除此之外,我还有三个对我的分析很重要的维度:group、id 和 status。通过考虑所有这些变量,我想看看从 4 月 19 日到 1 月 20 日的份额如何变化。

我已经在下图中显示了我想要的数据:

如果你能帮我做这件事,我会很高兴。提前致谢。

【问题讨论】:

  • 请不要发布代码/数据/错误的图像:它不能被复制或搜索 (SEO),它会破坏屏幕阅读器,并且它可能不适合某些移动设备。参考:meta.stackoverflow.com/a/285557/3358272(和xkcd.com/2116)。请直接包含代码或数据(例如,dput(head(x))data.frame(...))。
  • 此外,当链接失效时,问题变得无法重现。您能否在问题本身中提供示例数据?这将涉及使用dput(head(x,10)) 之类的东西或以编程方式使用data.frame(...),以及该样本的预期输出。参考:stackoverflow.com/questions/5963269stackoverflow.com/help/mcvestackoverflow.com/tags/r/info
  • 你是对的,对不起。我刚刚将示例数据添加为小标题。但由于很难在 R 中产生预期的输出,我不得不从 Excel 中附加图像。 @r2evans
  • 在原始数据中,A 和 FALSE 在同一行,但输出中没有 A 和 FALSE 列。
  • 对,好点。我基本上在输出中总结了 FALSE 和 TRUE。但是,拥有 A 和 FALSE 的列是完全可以的。 @G.Grothendieck

标签: r dplyr tidyverse


【解决方案1】:

1) 将共享转换为数字并从中创建一个表xt。然后使用ftable 显示表格。现在您可以删除或聚合您希望的任何列,或者可能只是保持原样或查看下面的 (2)。不使用任何包。

dfk$share <- as.numeric(chartr(",%", ". ", dfk$share))
xt <- xtabs(share ~., dfk)
ftable(xt, row.vars = "id", col.vars = c("status", "group"))

给予:

       status            A                                                   B                                                   C                                       
       group         FALSE FALSE & TRUE           NA         TRUE        FALSE FALSE & TRUE           NA         TRUE        FALSE FALSE & TRUE           NA         TRUE
id                                                                                                                                                                       
1362            0.00000000   0.00000000   0.00000000  76.41851999   0.00000000   0.00000000   0.00000000   0.00000000   0.00000000   0.00000000   0.00000000   0.00000000
21788           0.00000000   0.00000000   0.00000000  99.83697573   0.00000000   0.00000000   0.00000000   0.00000000   0.00000000   0.00000000   0.00000000   0.00000000
22625           0.00000000   0.00000000   0.00000000   0.00000000   0.00000000   0.00000000   0.00000000  87.40156115   0.00000000   0.00000000   0.00000000   0.00000000
25092           0.05090427   0.00000000   0.00000000   0.00000000   0.00000000   0.00000000   0.00000000   0.00000000   0.00000000   0.00000000   0.00000000   0.00000000
29374           0.00000000   0.00000000   0.00000000   0.00000000   0.00000000   0.00000000  60.58465286   0.00000000   0.00000000   0.00000000  59.87388222   0.00000000
31002           0.00000000   0.00000000   0.00000000   0.00000000   0.00000000   0.00000000   0.00000000   0.00000000   0.00000000 100.00000000   0.00000000   0.00000000
315618          0.00000000   0.00000000   0.00000000  99.69751966   0.00000000   0.00000000   0.00000000   0.00000000   0.00000000   0.00000000   0.00000000   0.00000000
62184          33.83359891   0.00000000   0.00000000   0.00000000   0.00000000   0.00000000   0.00000000   0.00000000   0.00000000   0.00000000   0.00000000   0.00000000
9961            0.00000000   0.00000000   0.00000000  45.86969168   0.00000000   0.00000000   0.00000000   0.00000000   0.00000000   0.00000000   0.00000000   0.00000000

2) 假设share 已按上述方式转换为数字,另一种选择是 data.table:

library(data.table)
dcast(data = dfk, id ~ status + group, value.var = "share", fill = 0)

给予:

      id     A_FALSE   A_TRUE     B_NA   B_TRUE C_FALSE & TRUE     C_NA
1   1362  0.00000000 76.41852  0.00000  0.00000              0  0.00000
2  21788  0.00000000 99.83698  0.00000  0.00000              0  0.00000
3  22625  0.00000000  0.00000  0.00000 87.40156              0  0.00000
4  25092  0.05090427  0.00000  0.00000  0.00000              0  0.00000
5  29374  0.00000000  0.00000 60.58465  0.00000              0 59.87388
6  31002  0.00000000  0.00000  0.00000  0.00000            100  0.00000
7 315618  0.00000000 99.69752  0.00000  0.00000              0  0.00000
8  62184 33.83359891  0.00000  0.00000  0.00000              0  0.00000
9   9961  0.00000000 45.86969  0.00000  0.00000              0  0.00000

【讨论】:

    猜你喜欢
    • 2021-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多