R:检查一列的所有值是否唯一匹配另一列的所有值

时间:2016-01-07 01:48:33

标签: r

我有一个包含很多值的数据集。 x的大部分与y中的值唯一匹配。然而,一些x匹配多个y。有没有一种简单的方法可以找到y的哪些值映射到多个x?

mydata <- data.frame(x = c(letters,letters), y=c(LETTERS,LETTERS))
mydata$y[c(3,5)] <- "A"
mydata$y[c(10,15)] <- "Z"
mydata %>% foo
[1] "A" "Z"

如果我在这里错过了一些明显的命令,我道歉。

3 个答案:

答案 0 :(得分:0)

使用dplyr,你可以这样做:

library(dplyr)
mydata <- data.frame(x = letters, y=LETTERS, stringsAsFactors = FALSE)
mydata$y[c(3,5)] <- "A"
mydata$y[c(10,15)] <- "Z"
mydata %>% group_by(y) %>% filter(n() > 1)

如果您只想提取y值,可以将其存储到这样的数据框中并找到唯一的y值:

df <- mydata %>% group_by(y) %>% filter(n() > 1)
unique(df$y)

获得相同输出的另一种替代格式如下。这将返回单个列数据帧而不是上面的向量。

mydata %>% group_by(y) %>% filter(n() > 1) %>% select(y) %>% distinct()

答案 1 :(得分:0)

使用data.table

library(data.table)
setDT(mydata)
mydata[,list(n=length(unique(x))), by=y][n>2,]
#       y n
#    1: A 3
#    2: Z 3

答案 2 :(得分:0)

如果我们需要'x'中相应的unique

library(data.table)
setDT(mydata)[,if(.N >2) toString(unique(.SD[[1L]])) , y]
#    y      V1
#1: A a, c, e
#2: Z j, o, z