我试图将数据帧的每一行中的参数值与所有其他行的相同参数的值进行比较。结果是矩阵在每行与每行的交集处为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]
}
}
答案 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`
但这不是技术上的矢量化。