【发布时间】:2017-12-23 22:35:15
【问题描述】:
这是一个基本问题,但我很难过:
我有以下 R 数据表:
library(data.table)
DT <- fread('unique_point biased data_points team groupID
up1 FALSE 3 A xy28352
up1 TRUE 4 A xy28352
up2 FALSE 1 A xy28352
up2 TRUE 0 X xy28352
up3 FALSE 12 Y xy28352
up3 TRUE 35 Z xy28352')
输出为
> DT
unique_point biased data_points team groupID
1: up1 FALSE 3 A xy28352
2: up1 TRUE 4 A xy28352
3: up2 FALSE 1 A xy28352
4: up2 TRUE 0 X xy28352
5: up3 FALSE 12 Y xy28352
6: up3 TRUE 35 Z xy28352
team 列的值是字母 A 到 Z,有 26 种可能性。眼下。如果我用这段代码计算行值:
DT[, counts := .N, by=c("team")]
给了
> DT
unique_point biased data_points team groupID counts
1: up1 FALSE 3 A xy28352 3
2: up1 TRUE 4 A xy28352 3
3: up2 FALSE 1 A xy28352 3
4: up2 TRUE 0 X xy28352 1
5: up3 FALSE 12 Y xy28352 1
6: up3 TRUE 35 Z xy28352 1
我想在 DT 中创建 26 个新列,给出每个 team、A、B、C 等的大小。
生成的 data.table 如下所示:
> DT
unique_point biased data_points team groupID A B C ... Z
1: up1 FALSE 3 A xy28352 3 0 0 ... 1
2: up1 TRUE 4 A xy28352 3 0 0 ... 1
3: up2 FALSE 1 A xy28352 3 0 0 ... 1
4: up2 TRUE 0 X xy28352 3 0 0 ... 1
5: up3 FALSE 12 Y xy28352 3 0 0 ... 1
6: up3 TRUE 35 Z xy28352 3 0 0 ... 1
我不确定如何使用data.table 语法做到这一点..
编辑:我也很高兴使用 base R 和 dplyr 来做到这一点。
【问题讨论】:
-
如何查看/使用这个输出?处理这么多稀疏列通常是一团糟。坚持使用您创建的
counts列有什么问题? -
@DavidArenburg 我实际上是在通过许多 data.tables 使用
mclapply来聚合一个 data.table,它将具有这些计数中的每一个。目前,当我从单个 data.tables 中使用counts时,某些字母可能没有值(例如,在上面的示例中,C、D、E ......)。因此,我尝试为每个单独的 data.table 创建这些总和,并在 mclapply 之后将这些值传递给汇总表。有意义吗? -
@steveb 你是对的。已编辑。
标签: r dataframe data.table melt unfold