Я проверяю 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, но я не знаю, как это может работать для строк