首页 > 解决方案 > 按 data.table 中的所有列分组

问题描述

我正在使用R 中的irisdata.table。

为了提醒它的外观,我在这里粘贴了六五行

   Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1:          5.1         3.5          1.4         0.2  setosa
2:          4.9         3.0          1.4         0.2  setosa
3:          4.7         3.2          1.3         0.2  setosa
4:          4.6         3.1          1.5         0.2  setosa
5:          5.0         3.6          1.4         0.2  setosa
6:          5.4         3.9          1.7         0.4  setosa

我想计算按所有列分组的行数。当然我们可以把所有的变量都写在 中by,像这样:

iris[, .(Freq = .N), by = .(Sepal.Length, Sepal.Width, Petal.Length, Petal.Width, Species)]



   Sepal.Length Sepal.Width Petal.Length Petal.Width Species Freq
1:          5.1         3.5          1.4         0.2  setosa    1
2:          4.9         3.0          1.4         0.2  setosa    1
3:          4.7         3.2          1.3         0.2  setosa    1
4:          4.6         3.1          1.5         0.2  setosa    1
5:          5.0         3.6          1.4         0.2  setosa    1
6:          5.4         3.9          1.7         0.4  setosa    1

但是,我想知道是否有一种方法可以按所有变量分组而无需键入所有列名?

标签: rdata.table

解决方案


如果您正在寻找重复项,uniqueN将默认使用所有列:

uniqueN(as.data.table(iris))
# [1] 149

这并不能直接回答您的问题,但它可能是一种更直接的方式来完成您最初尝试做的事情。

同样,如果您要查找重复的行,则可以使用duplicated'data.table方法,该方法同样默认使用所有列:

iris[duplicated(iris)]
#    Sepal.Length Sepal.Width Petal.Length Petal.Width   Species
# 1:          5.8         2.7          5.1         1.9 virginica

推荐阅读