删除 R 中重复的行
Remove rows that have a duplicate in R
我有
a <- c(rep("A", 3), rep("B", 3), rep("C",2), rep("D", 1))
b <- c(1,1,2,4,1,1,2,2,5)
df <-data.frame(a,b)
基于 df$a
,我想 return 只有没有重复的值(那些只出现一次 df$a
的行),在这个例子中它将是 1 D 5
我已经尝试了 duplicate()
、!duplicate()
和 unique()
,但是 none 输出了我需要的。
一个选项
df[!(df$a %in% df$a[duplicated(df$a)]),]
a b
9 D 5
dplyr
最干净的方式:
library(dplyr)
df %>% group_by(a) %>%
filter(n() == 1)
输出:
# A tibble: 1 x 2
# Groups: a [1]
a b
<chr> <dbl>
1 D 5
与Base R
,
x <- table(df[,1])
df[rep(x<2,x),]
给予,
# a b
# 9 D 5
使用data.table
library(data.table)
setDT(df)
df[, tmp:= .N, by = a][tmp == 1, -"tmp"]
a b
1: D 5
我有
a <- c(rep("A", 3), rep("B", 3), rep("C",2), rep("D", 1))
b <- c(1,1,2,4,1,1,2,2,5)
df <-data.frame(a,b)
基于 df$a
,我想 return 只有没有重复的值(那些只出现一次 df$a
的行),在这个例子中它将是 1 D 5
我已经尝试了 duplicate()
、!duplicate()
和 unique()
,但是 none 输出了我需要的。
一个选项
df[!(df$a %in% df$a[duplicated(df$a)]),]
a b
9 D 5
dplyr
最干净的方式:
library(dplyr)
df %>% group_by(a) %>%
filter(n() == 1)
输出:
# A tibble: 1 x 2
# Groups: a [1]
a b
<chr> <dbl>
1 D 5
与Base R
,
x <- table(df[,1])
df[rep(x<2,x),]
给予,
# a b
# 9 D 5
使用data.table
library(data.table)
setDT(df)
df[, tmp:= .N, by = a][tmp == 1, -"tmp"]
a b
1: D 5