【发布时间】:2020-10-04 18:40:23
【问题描述】:
我正在练习旋转data.table,下面的示例使用lapply 来获取子结构特征及其对应的列,其中键列的排序很重要,这可以看作是电子表格工具中的旋转。这类似于数据透视表和可能称为立方体的 R 工具,其他小计工具可能比lapply 更易于使用。我愿意与更方便的工具进行比较,lapply 似乎在您需要更多功能时变得非常简洁,尤其是在不同订单时。
演示
我在data.table 中使用paste0 形成新的子类别,我想在这些子类别上计算特征,例如平均值和总和。下面是带有输入和预期输出的小示例。
输入
> data.table(cn=c('a','a','b','b','c'),test=c(1,2,3,4,0),cat=c(1,1,1,2,2))
cn test cat
1: a 1 1
2: a 2 1
3: b 3 1
4: b 4 2
5: c 0 2
> myData <- data.table(cn=c('a','a','b','b','c'),test=c(1,2,3,4,0),cat=c(1,1,1,2,2))
> myData[order(test), lapply(.SD, paste0, collapse = '>'), by = c('cat')]
cat cn test
1: 2 c>b 0>4
2: 1 a>a>b 1>2>3
#How can I add here new functions to get new columns for the segments such as a>a>b
输出
cat cn test test_sum test_avg
1: 1 a>a>b 1>2>3 6 2
2: 2 c>b 0>4 4 2
更简单地说,我们如何通过输入获得输出? lapply 是这里的正确选择吗?请注意,排序对某些功能很重要,而对某些功能无关。
如何在某些函数需要排序而某些不需要排序的地方正确地旋转 data.table?
【问题讨论】:
标签: r data.table pivot-table lapply subtotal