-1

我在 R 中有一个两列数据框,假设它如下所示

V1 V2
1 2
2 4
1 2
2 3
1 2
...

如果 V1 中的值出现不止一次,并且这些具有共同 V1 值的行具有不同的 V2 值,则将它们过滤掉。

我怎样才能在 R 中有效地做到这一点?我想我需要使用一些哈希功能,对吧?但我不知道该怎么做。

谢谢你。

4

2 回答 2

1

1)试试这个:

DF <- data.frame(V1 = c(1L, 2L, 1L, 2L, 1L), V2 = c(2L, 4L, 2L, 3L, 2L))

is.ok <- function(x) var(range(x)) == 0
subset(DF, ave(V2, V1, FUN = is.ok) == 1) 

最后一行的结果是:

  V1 V2
1  1  2
3  1  2
5  1  2

要获取不一致的数据而不是一致的数据,请更改== 1== 0最后一行代码。

2)如果您不想显示重复项,那么这将显示一致的行但没有重复项:

subset(unique(DF), ave(V2, V1, FUN = length) == 1)

这给出了:

  V1 V2
1  1  2

在代码中更改== 1> 1改为显示省略重复的不一致行。

于 2013-07-03T23:31:11.377 回答
0

在问题说明中使用不定代词容易被误解。我正在展示的代码将“它们”解释为“V1 的值与多个 V2 的值相关联的所有行实例”,并且“过滤器”被解释为在 data.frame 中交付它们以供检查。

  more.than.one.V2 <- dfrm[ave(dfrm$V2, dfrm$V1, 
                             FUN=function(x){length(unique(x))!=1} ), ]
  only.one.V2 <- dfrm[ave(dfrm$V2, dfrm$V1, 
                             FUN=function(x){length(unique(x))==1} ), ]
于 2013-07-03T23:33:24.737 回答