0

自分を表現するのにいくつか問題があります。おそらく、それが私がまだ私を助けるものを見つけていない理由です。例は私が欲しいものを明らかにするはずです。座標のamxm行列構造があるとします。A1からE5の範囲であるとしましょう。そして、外側の座標からk行離れた行/列をサブセット化したい。

私の例では、kは2です。したがって、座標B2、B3、B4、C2、C4、D2、D3、D4を持つデータフレーム内のすべてのレコードを選択します。手動で、私は次のことをします:

cc <- data.frame(x=(LETTERS[1:5]), y=c(rep(1,5),rep(2,5),rep(3,5), rep(4,5), rep(5,5)) , z=rnorm(25))
slct <- with(cc, which( (x=="B" | x=="C" | x=="D" ) & (y==2 | y==3 | y==4) & !(x=="C" & y==3) ))
cc[slct,] # result data frame

しかし、マトリックスの次元が増加した場合、それはうまく機能する方法ではありません。より良いアイデアはありますか?

4

2 に答える 2

2

かなり読みにくいですが、うまくいきます。

m <- 5   # Matrix dimensions
k <- 2   # The index of the the inner square that you want to extract
cc[(cc$x %in% LETTERS[c(k,m-k+1)] & !cc$y %in% c(1:(k-1), m:(m-k+2))) |
   (cc$y %in% c(k, m-k+1)         & !cc$x %in% LETTERS[c(1:(k-1), m:(m-k+2))]),]

比較の最初の行はk、行列の左端と右端から :th 列を抽出しますkが、上端と下端よりも近い部分は抽出しません。2 行目も同じことを行いますが、行に対してです。

于 2012-08-24T11:28:21.650 に答える
2
cc$xy <- paste0(cc$x,cc$y)

coords <- c("B2","B3","B4", "C2", "C4", "D2", "D3", "D4")
cc[cc$xy %in% coords,]

#   x y          z xy
#7  B 2 -0.9031472 B2
#8  C 2 -0.1405147 C2
#9  D 2  1.6017619 D2
#12 B 3  1.7713041 B3
#14 D 3 -0.2005749 D3
#17 B 4  1.8671238 B4
#18 C 4  0.3428815 C4
#19 D 4  0.1470436 D4
于 2012-08-24T11:29:49.133 に答える