我需要一些帮助来过滤数据框。
df有几列,我想把它分成两个数据帧:
1-仅包含第一列重复的行(包括所有副本)。
2-其余行,不重复。
这是一个例子: 这将是原始的。
V1 V2
[1,] "A" "1"
[2,] "B" "1"
[3,] "A" "1"
[4,] "C" "2"
[5,] "D" "3"
[6,] "D" "4"
我想变成这个:
V1 V2
[1,] "A" "1"
[2,] "A" "1"
[3,] "D" "3"
[4,] "D" "4"
而且:
V1 V2
[1,] "B" "1"
[2,] "C" "2"
有办法吗?我已尝试导出到Excel,但数据集太大而无法使其可行。
谢谢
答案 0 :(得分:1)
考虑df
作为输入,您可以使用dplyr
并尝试:
df %>% group_by(V1) %>% filter(n() > 1)
表示重复项
和
df %>% group_by(V1) %>% filter(n() == 1)
表示唯一条目。
答案 1 :(得分:1)
您可以使用duplicated
但请注意duplicated
仅在第一个重复值返回TRUE
,即
> duplicated(c("A", "A", "A"))
[1] FALSE TRUE TRUE
不会为第一个TRUE
返回"A"
。如果您想捕获"A"
的所有值,您可以例如使用
duplicated(c("A", "A", "A")) | duplicated(c("A", "A", "A"), fromLast = TRUE)
# [1] TRUE TRUE TRUE
然后,您可以使用
分隔数据## Index of the duplicated values:
indDuplicatedVec <- duplicated(d[,1]) | duplicated(d[,1], fromLast = TRUE)
myDuplicates <- d[indDuplicatedVec, ]
myUniques <- d[!indDuplicatedVec, ]
> myDuplicates
#V1 V2
#1 A 1
#3 A 1
#5 D 3
#6 D 4
> myUniques
#V1 V2
#2 B 1
#4 C 2
答案 2 :(得分:0)
我们可以使用data.table
library(data.table)
setDT(df)[, .SD[.N >1], V1]
答案 3 :(得分:-1)
尝试
d[!duplicated(d),]
和
d[duplicated(d),]
其中d
是您的数据库。
===更新=== 如果只需要第一列,并且所有重复项都需要单独列,则可以执行以下操作:
library(gdata)
d[duplicated2(d$V1,bothWays = T),]
d[!duplicated2(d$V1,bothWays = T),]
如果只需要基础R,那么:
bm <- duplicated(d$V1) | duplicated(d$V1,fromLast = TRUE)
d[bm,]
d[!bm,]