Как упростить этот RCode, особенно для циклов for, чтобы ускорить? - PullRequest
0 голосов
/ 27 марта 2019

Я проверяю df с 10000 строками и 6000 столбцами, если есть похожие строки (здесь: 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 с количеством похожих строк. Но я надеюсь на лучший / более быстрый способ mabe с функциями apply, но я не знаю, как это может работать для строк

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...