我正在尝试按如下方式过滤R中的数据帧。
让mydf成为具有两列A和B的数据帧。
让udf成为另一个具有1列A的数据帧。
我想做以下事情。
Select rows from mydf where mydf[A] is in udf[A]
我正在使用dplyr并在行上尝试了一些
T = filter(mydf, A %in% udf['A'])
这显然不起作用。有没有明确写入for循环的直接解决方法?非常感谢!
答案 0 :(得分:2)
您可以使用inner_join
dplyr
library(dplyr)
r1 <- inner_join(mydf, udf, by='A')
或使用filter
评论@BondedDust
r2 <- filter(mydf, A %in% udf[['A']])
identical(r1, r2)
#[1] TRUE
或使用data.table
library(data.table)
setkey(setDT(mydf),A)[udf, nomatch=0]
set.seed(24)
mydf <- as.data.frame(matrix(sample(1:10,2*10, replace=TRUE),
ncol=2, dimnames=list(NULL, LETTERS[1:2])) )
set.seed(29)
udf <- data.frame(A=sample(1:10,6,replace=TRUE))
答案 1 :(得分:0)
您可以简单地点击数据并使用left_join
功能。
这是一个可重现的例子:
set.seed(123)
colors<- c( rep("yellow", 5), rep("blue", 5), rep("green", 5) )
shapes<- c("circle", "star", "oblong")
numbers<-sample(1:15,replace=T)
group<-sample(LETTERS, 15, replace=T)
mydf<-data.frame(colors,shapes,numbers,group)
mydf
mydf2<- mydf %>%
filter (colors=="yellow")
mydf3 <- mydf %>% left_join(mydf2)