首页 > 解决方案 > R数据框中行的子集

问题描述

我目前正在从网络上抓取一些数据,数据示例如下所示:

    col_a | col_b | col_c | col_d
    1     | 2     | 44    | home1
    1     | 3     | 44    | home1
    1     | 7     | 44    | home1
    1     | 5     | 44    | home1
    1     | 2     | 44    | home1
    1     | 3     | 44    | home1
    1     | 7     | 44    | home1
    1     | 5     | 44    | home1
    2     | 8     | 42    | home1
    2     | 6     | 42    | home1
    2     | 4     | 42    | home1
    2     | 1     | 42    | home1

如上例所示,共有 12 行。正确的数据应该只有 8 行数据,使用“col_a”作为参考,每个唯一的“col_a”应该只有 4 行。因此,在这种情况下,第 5 到第 8 行是第 1 到第 4 行的副本。话虽如此,抓取的数据有 100,000 多行,并且这种重复发生在各处。有没有办法只保留每个唯一“col_a”的前 4 行?除了遍历每一行之外,我想不出一种有效的方法。

标签: r

解决方案


您可以通过以下方式获得 col_a 中的不同值:

col_a_unique <- unique(data$col_a)

然后最终循环它并只保留每个的前四个:

for (a in col_a_unique)
{
 to_keep=data[which(data$col_a==a),][1:4]
}

wihch()将仅选择满足等式的行,即与 col_a 上的给定值相对应的所有元素,然后[1:4]选择前四个元素。

然后,您需要创建一个适当的对象来存储to_keep每个循环步骤。

这是一个详细的方法,还有更简洁的方法。


推荐阅读