如何在r中的两个变量中保持具有相同值的行?

时间:2016-11-15 22:36:56

标签: r

我有一个包含多个变量的数据集,但我希望根据两列保留相同的行。这是我想要做的一个例子:

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都有相同的值。

有办法做到这一点吗?谢谢!

3 个答案:

答案 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