У меня есть большой размер кадра данных (40000 наблюдений 800 переменных) и вы хотите работать с диапазоном столбцов каждого наблюдения с чем-то похожим на точечный продукт. Вот как я его реализовал:R-Операция на подмножестве столбцов из dataframe с ddply
matrixattempt <- as.matrix(dframe)
takerow <- function(k) {as.vector(matrixattempt[k,])}
takedot0 <- function(k) {sqrt(sum(data0averrow * takerow(k)[2:785]))}
for (k in 1:40000){
print(k)
dframe$dot0aver[k]<-takedot0(k)
}
Печать предназначена только для отслеживания происходящего. data0averrow - числовой вектор, такой же размер, как takerow (k) [2: 785], который был предварительно определен.
Это работает, и из нескольких тестов работает правильно, но это очень медленно.
Я искал точечный продукт для подмножества столбцов и нашел this question, но не смог понять, как применить его к моей настройке. ddply звучит так, как будто он должен работать быстрее (хотя я не хочу делать расщепление и должен использовать тот же трюк идентификатора id, что и упомянутый вопроситель). Любые идеи/подсказки?
Если ни один из этих ответов не работает, вам действительно нужно решить эту проблему с помощью небольшого тестового примера, например, 8 x 10 матриц? –
@ Ответ Аруна работал хорошо. Спасибо. – zdilli