5

私は次のデータフレームを持っています:

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

と2つの要因

x1 <- as.factor(c("sp1","sp2"))
x2 <- as.factor(c("sp3","sp4"))

x1とのすべての可能な組み合わせと、この組み合わせに関連付けられx2freqfromデータフレーム を含むデータフレームが返される必要があります。d

返されるデータフレームは次のようになります。

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

私が試してみました:

sub <- d[d$X1 == x1 & d$X2 == x2,]

しかし、エラーが発生します

Error in Ops.factor(d$X1, x1) : level sets of factors are different

この問題を解決する方法について何かアイデアはありますか?

4

2 に答える 2

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,]
于 2012-06-19T10:56:51.133 に答える
5

あなたはほとんどそこにいます:

d[d$X1 %in% x1 & d$X2 %in% x2,]
于 2012-06-19T10:56:03.643 に答える