从表中获取行的两两组合 - r?

4
假设有以下表格:

X = 

        col1    col2    col3
row1    "A"      "0"     "1"
row2    "B"      "2"     "NA"
row3    "C"      "1"     "2"

我使用以下代码选择两行的组合:

pair <- apply(X, 2, combn, m=2)

这将返回一个如下形式的矩阵:
pair = 

 [,1] [,2] [,3]
[1,] "A"  "0"  "1" 
[2,] "B"  "2"  NA  
[3,] "A"  "0"  "1" 
[4,] "C"  "1"  "2" 
[5,] "B"  "2"  NA  
[6,] "C"  "1"  "2" 

我希望能够迭代处理成对的行,每次取两行,例如先分别取[1,]和[2,],然后是[3,]和[4,],最后是[5,]和[6,]。这些行将作为参数传递给回归模型,即lm(Y ~ row[i]*row[j])。
我正在处理一个大型数据集。请问有什么方法可以迭代处理矩阵中的两行,将这些行分配给变量,并作为参数传递给函数?
谢谢, S ;-)

提供一个可重现的例子可以增加别人帮助你的可能性,并且有助于他们提供更好的答案。 - Joshua Ulrich
2个回答

4

不必像那样扩展矩阵的行数,如果数据集很大,这样做可能会导致问题。相反,只需为每个实例选择相关的行即可。但是预先创建好选择可能更加方便,例如:

xselect <- combn(1:nrow(X),2)

为了说明问题,假设您只使用第二列和第三列的数据:
X <- matrix(c("A", "B", "C", 0,2,1,1,NA,2),3,3)
Y <- rnorm(2, 4, 2)

for (i in 1:ncol(xselect))
{
  x1 <- as.numeric(X[xselect[1,i], c(2,3)])
  x2 <- as.numeric(X[xselect[2,i], c(2,3)])
  print(lm(Y ~ x1 * x2))
}

1

我不确定你在尝试使用线性模型做什么,但要迭代X,每次取一对行,为每对创建一个因子,然后使用by

fac <- as.factor(sort(rep(1:(nrow(X)/2), 2)))
by(X, fac, FUN)

其中FUN是您想在X的行对上应用的任何函数。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接