按R中的因子过滤数据帧

Eli*_*eth 5 r

我有以下数据帧:

sp <- combn(c("sp1","sp2","sp3","sp4"),2)
d <- data.frame(t(sp),"freq"=sample(0:100,6))
Run Code Online (Sandbox Code Playgroud)

和两个因素

x1 <- as.factor(c("sp1","sp2"))
x2 <- as.factor(c("sp3","sp4"))
Run Code Online (Sandbox Code Playgroud)

我需要一个包含所有可能的组合返回的数据帧x1,并x2freq从数据帧 d与该组合相关.

返回的数据框如下所示:

data.frame("X1" = c("sp1","sp1","sp2","sp2"),
           "X2" = c("sp3","sp4","sp3","sp4"),
           "freq" = c(4,94,46,74))
Run Code Online (Sandbox Code Playgroud)

我试过了:

sub <- d[d$X1 == x1 & d$X2 == x2,]
Run Code Online (Sandbox Code Playgroud)

但得到错误

Error in Ops.factor(d$X1, x1) : level sets of factors are different
Run Code Online (Sandbox Code Playgroud)

关于如何解决这个问题的任何想法?

Joh*_*ohn 6

不要制造x1x2因素。只需使用向量。使用%in%的逻辑测试。

sp <- combn(c("sp1","sp2","sp3","sp4"),2)
d <- data.frame(t(sp),"freq"=sample(0:100,6))
x1 <- c("sp1","sp2")
x2 <- c("sp3","sp4")
sub <- d[d$X1 %in% x1 & d$X2 %in% x2,]
Run Code Online (Sandbox Code Playgroud)


Jul*_*ora 5

你快到了:

d[d$X1 %in% x1 & d$X2 %in% x2,]
Run Code Online (Sandbox Code Playgroud)