我有一个包含很多值的数据集。 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"
如果我在这里错过了一些明显的命令,我道歉。
答案 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