从R中的数据框中仅提取唯一行

时间:2014-12-10 18:39:14

标签: r

我想对数据框进行分区,以便某个列中唯一的元素与非唯一元素分开。因此,下面的数据框将分为两个数据帧,如此

    id   v1   v2
1    1    2    3
2    1    1    1 
3    2    1    1
4    3    1    2
5    4    5    6
6    4    3    1

    id   v1   v2
1    2    1    1
2    3    1    2

    id   v1   v2
1    1    2    3
2    1    1    1 
3    4    5    6
4    4    3    1

它们分为id列的唯一性。 duplicated在这种情况下不起作用,因为顶部数据框中的第1行和第5行不被视为重复,即第一次出现在FALSE中返回duplicated

修改

我去了

dups <- df[duplicated(df1$id) | duplicated(df$id, fromLast=TRUE), ]
uniq <- df[!duplicated(df1$id) & !duplicated(df$id, fromLast=TRUE), ]

使用我的250,000行数据帧非常快速地运行。

1 个答案:

答案 0 :(得分:1)

我认为解决此问题的最简单方法是使用data.table并查看id

以上的计数超过1的位置

您的数据

data <- read.table(header=T,text="
    id   v1   v2
    1    2    3
    1    1    1 
    2    1    1
    3    1    2
    4    5    6
    4    3    1
")

溢出数据的代码

library(data.table)
setDT(data)
data[, Count := .N, by=id]

id

的唯一表格
data[Count==1]

   id v1 v2 Count
1:  2  1  1     1
2:  3  1  2     1

id

的非唯一表格
data[Count>1]

   id v1 v2 Count
1:  1  2  3     2
2:  1  1  1     2
3:  4  5  6     2
4:  4  3  1     2