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上下边缘更近的部分。第二行做同样的事情,但行。

于 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 回答