如何对您的数据框进行子集化以在 R 中保留前 3 个重复行?

Posted

技术标签:

【中文标题】如何对您的数据框进行子集化以在 R 中保留前 3 个重复行?【英文标题】:How to subset your dataframe to keep first 3 duplicate rows in R? 【发布时间】:2022-01-20 02:36:21 【问题描述】:

我有一张如下表格的表格

我只想根据 V1 和 V@ 的重复值保留前 3 行,如下所示:

df %>% distinct(V1,V2) 只让我保留第一行。

【问题讨论】:

请不要发布数据截图。发布代码以生成您的数据。 【参考方案1】:

你可以试试

library(dplyr)
df %>%
  group_by(V1, V2) %>%
  filter(row_number() <= 3)
     V1    V2    V3
  <dbl> <dbl> <dbl>
1     1     2     4
2     1     2     5
3     1     2     6
4     9     3    10
5     9     3    15
6     9     3    16

【讨论】:

也可以用slice_head(n=3)代替filter【参考方案2】:

带data.table:

library(data.table)
dt <- data.table(c(rep(1, 4), rep(9, 5)), c(rep(2, 4), rep(3, 5)), c(4:7, 10, 15:18)) 
dt[, .SD[1:3], by = c('V1', 'V2')]
   V1 V2 V3
1:  1  2  4
2:  1  2  5
3:  1  2  6
4:  9  3 10
5:  9  3 15
6:  9  3 16

如果您不想使用 V3 = NA 的行(如果重复项少于 3 个),则可以使用 .SD[1:min(3, .N)]

【讨论】:

以上是关于如何对您的数据框进行子集化以在 R 中保留前 3 个重复行?的主要内容,如果未能解决你的问题,请参考以下文章

R中数据框的空间子集

如何对 RandomForest 进行二值化以在 python 中绘制 ROC?

R中数据框中的嵌套子集

将3个div样式化以在flex容器内正确对齐[关闭]

如何编写用于迭代 DataFrame 的 for 循环并将其子集化以仅包含在每次迭代中检索到的那些列?

如何对 SparkR 数据框进行子集化