【发布时间】:2012-12-07 18:16:01
【问题描述】:
我正在寻找用于操作data.table 对象的模式,其结构类似于使用reshape2 包中的melt 创建的数据帧。我正在处理具有数百万行的数据表。性能至关重要。
问题的一般形式是是否有一种方法可以根据列中的值子集执行分组,并让分组操作的结果创建一个或多个新列。
问题的一种具体形式可能是如何使用data.table 来完成dcast 在以下方面所做的等效工作:
input <- data.table(
id=c(1, 1, 1, 2, 2, 2, 3, 3, 3, 3),
variable=c('x', 'y', 'y', 'x', 'y', 'y', 'x', 'x', 'y', 'other'),
value=c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10))
dcast(input,
id ~ variable, sum,
subset=.(variable %in% c('x', 'y')))
输出是
id x y
1 1 1 5
2 2 4 11
3 3 15 9
【问题讨论】:
-
我很困惑,抱歉 - dcast() 函数在没有 as.data.frame() 强制的情况下工作。您是否尝试在不使用 plyr 包的情况下完成此操作?
-
@AnthonyDamico 是的,我想在没有
dcast的情况下完成此操作,它位于reshape2中。我已经删除了 as.data.frame()——感谢您指出这一点。
标签: r dataframe data.table aggregation reshape2