我想对数据框进行分区,以便某个列中唯一的元素与非唯一元素分开。因此,下面的数据框将分为两个数据帧,如此
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行数据帧非常快速地运行。
答案 0 :(得分:1)
我认为解决此问题的最简单方法是使用data.table
并查看id
您的数据
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