0

我试图将数据帧每一行中的参数值与所有其他行的相同参数的值进行比较。结果是一个矩阵,在每行与每行的交点上为 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]
  }
}
4

2 回答 2

4

您可以使用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
于 2013-07-04T18:46:51.713 回答
1

apply

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

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

于 2013-07-04T18:46:37.960 回答