R 如何聚合具有三个维度的数据?
在数据处理之后,我有一个类似这样的数据集: 您可以在此处找到数据集: 如果您无法访问数据,以下是一个示例:R 如何聚合具有三个维度的数据?,r,dplyr,tidyverse,R,Dplyr,Tidyverse,在数据处理之后,我有一个类似这样的数据集: 您可以在此处找到数据集: 如果您无法访问数据,以下是一个示例: dfk <- tribble( ~group, ~date, ~id, ~share, ~status, 'FALSE', 'January 20', '25092', '0,050904271%', 'A', 'NA', 'April 19', '293
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',
)
dfk1)将共享转换为数字,并从中创建一个表xt
。然后使用ftable
显示表格。现在,您可以删除或聚合任何您想要的列,或者保持原样,或者查看下面的(2)。没有使用任何软件包
dfk$share <- as.numeric(chartr(",%", ". ", dfk$share))
xt <- xtabs(share ~., dfk)
ftable(xt, row.vars = "id", col.vars = c("status", "group"))
2)假设share
已如上转换为数字,另一种选择是data.table:
library(data.table)
dcast(data = dfk, id ~ status + group, value.var = "share", fill = 0)
给予:
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
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
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"))
2)假设share
已如上转换为数字,另一种选择是data.table:
library(data.table)
dcast(data = dfk, id ~ status + group, value.var = "share", fill = 0)
给予:
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
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
请不要发布代码/数据/错误的图像:它无法复制或搜索(SEO),它会破坏屏幕阅读器,并且可能不适合某些移动设备。参考:(和)。请直接包含代码或数据(例如,dput(head(x))
或data.frame(…)
),此外,当链接过时时,问题将无法产生。你能提供问题本身的样本数据吗?这将涉及到使用类似于dput(head(x,10))
的东西,或者以编程方式使用data.frame(…)
,以及该示例的预期输出。裁判:还有。你说得对,对不起。我刚刚将示例数据添加为TIBLE。但是,由于在R中生成预期的输出非常困难,所以我不得不从Excel中附加图像@r2e在原始数据的同一行上有A和FALSE,但在输出中没有A和FALSE的列。对,很好。我基本上在输出中求和FALSE和TRUE。但这是完全好的,有一个和虚假的专栏@G.Grothendieck请不要发布代码/数据/错误的图像:它无法复制或搜索(SEO),它会破坏屏幕阅读器,并且可能不适合某些移动设备。参考:(和)。请直接包含代码或数据(例如,dput(head(x))
或data.frame(…)
),此外,当链接过时时,问题将无法产生。你能提供问题本身的样本数据吗?这将涉及到使用类似于dput(head(x,10))
的东西,或者以编程方式使用data.frame(…)
,以及该示例的预期输出。裁判:还有。你说得对,对不起。我刚刚将示例数据添加为TIBLE。但是,由于在R中生成预期的输出非常困难,所以我不得不从Excel中附加图像@r2e在原始数据的同一行上有A和FALSE,但在输出中没有A和FALSE的列。对,很好。我基本上在输出中求和FALSE和TRUE。但这是完全好的,有一个和虚假的专栏@G.格罗森迪克