如何简化RCode特别是for循环以加快速度?

时间:2019-03-27 09:58:25

标签: r

我正在检查具有10000行和6000列的df,如果有与我的引用相似的字符串(此处为:a,b,c)。 我想计算每一行的相似字符串。

我的问题是for循环,特别是第一个循环非常慢。我已经像以前的“提速”评论中那样更改了name_dat [,a],但仍然不够快。我正在寻找一种更智能的方法,而无需检查每一行和每一列中的每个字符串。也许有一种方法可以进行行比较?

x <- data.frame("name" = c("one","two","three"), "X1" = c("c","c","b"), "X2" = c("b","b","a"), "X3" = c("a","c","b"), "X4" = c("b","c","b"),stringsAsFactors = F)
y <- data.frame("name" = c("reference"), "X1" = c("c"), "X2" = c("a"), "X3" = c("b"), "X4" = c("b"),stringsAsFactors = F)

sum_list <- list() 
df <- y[-1,-1]  #df only with colnames

for (a in 1:length(x[,1])) {
  name_dat <- x[a,][-1]

      for (b in 1:length(x[,-1])) {
            n <- name_dat[,b]
            m <- y[-1][,b]

            if (n == m) {name_dat[,b] <- n}
            else  {name_dat[,b] <- NA} 
      } # end first loop
  sum_list[[a]] <- length(x[,-1]) - rowSums(is.na(name_dat))   
} #end second loop

使用sum_list,我可以得到具有类似字符串数量的结果df。但是我希望有一个使用apply函数的更好/更快的方法,但是我不知道这对字符串如何起作用

0 个答案:

没有答案