- 此问题在此处已有答案**:
(9个答案)
昨天关门了。
我有一个包含200.000+行的大型数据集。我想将其按两列分组,基于另一列进行筛选,同时保留所有其他列。示例如下所示:
hv001 hv002 hv101 hv104 hv105
1 1 1 1 1 35
2 1 1 2 2 22
3 1 1 3 2 2
4 1 1 3 2 0
5 1 4 1 1 35
6 1 4 2 2 32
7 1 4 3 2 4
8 1 4 3 2 2
9 1 4 3 1 1
10 1 7 1 1 51
structure(list(hv001 = c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1), hv002 = c(1,
1, 1, 1, 4, 4, 4, 4, 4, 7), hv101 = c(1, 2, 3, 3, 1, 2, 3, 3,
3, 1), hv104 = c(1, 2, 2, 2, 1, 2, 2, 2, 1, 1), hv105 = c(35,
22, 2, 0, 35, 32, 4, 2, 1, 51)), row.names = c(NA, -10L), class = "data.frame")
我可以用dplyr来做这个,但是它太慢了。代码如下:
df |>
group_by(hv001, hv002) |>
slice_min(hv101)
现在有了data.table,可以更快地完成这一操作,但是它并不保留所有列。如何保留所有列,或者在执行group by时如何对列进行切片?代码如下所示:
df_dt <- as.data.table(df)
df_dt[, .(min_hv101 = min(hv101)), by = c("hv001", "hv002")]
1条答案
按热度按时间ru9i0ody1#
您可以像这样添加
.SD
来创建数据表的子集:创建于2023年1月8日,reprex v2.0.2
这个答案很好地解释了
.SD
的含义:What does .SD stand for in data.table in R