我有一个包含多个变量的数据集,但我希望根据两列保留相同的行。这是我想要做的一个例子:
a <- c(rep('A',3), rep('B', 3), rep('C',3))
b <- c(1,1,2,4,4,4,5,5,5)
df <- data.frame(a,b)
a b
1 A 1
2 A 1
3 A 2
4 B 4
5 B 4
6 B 4
7 C 5
8 C 5
9 C 5
我知道如果我使用重复的功能,我可以得到:
df[!duplicated(df),]
a b
1 A 1
3 A 2
4 B 4
7 C 5
但是因为A&#39; A&#39;在a
列上b
中没有唯一值,我想删除两个观察值以获取新的data.frame:
a b
4 B 4
7 C 5
我不介意在b
内重复使用值,只要a
上的每个相同级别b
都有相同的值。
有办法做到这一点吗?谢谢!
答案 0 :(得分:2)
这个可能吗?
ag <- aggregate(b~a, df, unique)
ag[lengths(ag$b)==1,]
# a b
#2 B 4
#3 C 5
答案 1 :(得分:0)
也许是这样的:
> ind <- apply(sapply(with(df, split(b,a)), diff), 2, function(x) all(x==0) )
> out <- df[!duplicated(df),]
> out[out$a %in% names(ind)[ind], ]
a b
4 B 4
7 C 5
答案 2 :(得分:0)
以下是data.table
library(data.table)
setDT(df)[, if(uniqueN(b)==1) .SD[1L], by = a]
# a b
#1: B 4
#2: C 5