使用内置的 data.frame 试试这个CO2
:
> xtabs(uptake ~ Treatment + Type, CO2)
Type
Treatment Quebec Mississippi
nonchilled 742.0 545.0
chilled 666.8 332.1
或类似地使用tapply
:
> with(CO2, tapply(uptake, list(Treatment, Type), sum))
Quebec Mississippi
nonchilled 742.0 545.0
chilled 666.8 332.1
现在与 data.table 进行比较:
> library(data.table)
>
> DT <- data.table(CO2)
> DT[, as.list(tapply(uptake, Type, sum)), by = Treatment]
Treatment Quebec Mississippi
1: nonchilled 742.0 545.0
2: chilled 666.8 332.1
注意事项:Type
如果不是在每个组中都出现 相同的水平,Treatment
那么这将是不够的。在这种情况下,有必要将其转换Type
为数据表中的一个因子(因为它已经在 中CO2
)。
添加:
它实际上可以摆脱tapply
并拥有像这样的纯数据表方法:
> DT[, setNames(as.list(.SD[,list(uptake = sum(uptake)), by = Type][, uptake]),
+ levels(Type)), by = Treatment]
Treatment Quebec Mississippi
1: nonchilled 742.0 545.0
2: chilled 666.8 332.1
上面的警告也适用于此。