r - 来自表的行的成对组合?

时间:2010-11-16 18:08:22

标签: r iteration combinations

假设一个表格如下:

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; - )

2 个答案:

答案 0 :(得分:4)

没有必要像这样乘以矩阵的行,如果你有一个大的数据集,它可能会有问题。而只是为每个实例选择相关的行。但事先创建选择很方便,也许这样:

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

用您的数据说明(假设您只使用第2列和第3列):

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 :(得分:1)

我不确定你要对线性模型做些什么,但要迭代X,一次一对行,为每一对做一个因子,然后使用{ {1}}

by

其中fac <- as.factor(sort(rep(1:(nrow(X)/2), 2))) by(X, fac, FUN) 是您要在X中的行对上应用的任何函数。