矢量化数据框中值的比较

时间:2013-07-04 18:39:28

标签: r loops vectorization apply

我试图将数据帧的每一行中的参数值与所有其他行的相同参数的值进行比较。结果是矩阵在每行与每行的交集处为TRUE / FALSE。以基于循环的方式实现它非常简单,但是对于大型数据帧需要花费太多的处理时间。我正在消隐一种“向量化”这段代码的方法(使用apply?)并加快处理代码的速度。非常感谢提前。

我目前使用的代码;

#dim matrix
adjm<- matrix(0,nrow=nrow(df),ncol=nrow(df))

#score
for(i in 1:nrow(df)){
  for(t in 1:nrow(df)){
    adjm[t,i]=df$varA[i]==df$varA[t]
  }
}

2 个答案:

答案 0 :(得分:3)

您可以使用outer来矢量化代码

outer(df$varA, df$varA, "==")

例如

df <- data.frame(varA = c(1, 2, 1, 3, 4, 2))

outer(df$varA, df$varA, "==")
##       [,1]  [,2]  [,3]  [,4]  [,5]  [,6]
## [1,]  TRUE FALSE  TRUE FALSE FALSE FALSE
## [2,] FALSE  TRUE FALSE FALSE FALSE  TRUE
## [3,]  TRUE FALSE  TRUE FALSE FALSE FALSE
## [4,] FALSE FALSE FALSE  TRUE FALSE FALSE
## [5,] FALSE FALSE FALSE FALSE  TRUE FALSE
## [6,] FALSE  TRUE FALSE FALSE FALSE  TRUE

答案 1 :(得分:1)

使用apply

apply(df,1,function(x) x[1] == df$varA) # `1` should be column number for `varA`

但这不是技术上的矢量化。