У меня возникли проблемы с использованием пакета data.table. Я использую этот пакет, потому что он кажется очень быстрым и эффективным с памятью, и он будет работать с очень большим набором данных (~ 6 м х 300).
Итак, в основном пример проблемы, с которой я столкнулся:
AA <- matrix(runif(50,0,100), 10,5)
AA <- data.table(AA)
colnames(AA) <- c("one","two","three","four","five")
AA[,"key"] <- c(1:10)
setkey(AA,key)
BB <- matrix(c("A1","A1","B1","A1","C1","F1","T1","Y1","S1","S1","B2","C2","V2","G2","R2","U2","P2","Q2","A2","R2"),10,2)
BB <- data.table(BB)
BB[,"key"] <- c(1:10)
setkey(BB,key)
CC <- AA[BB]
Это дает следующее
> CC
key one two three four five V1 V2
[1,] 1 70.528360 7.901987 66.827238 44.51487 26.22273 A1 B2
[2,] 2 38.560889 31.808611 7.877950 34.51093 51.27989 A1 C2
[3,] 3 70.164154 16.636281 59.127573 79.95673 19.07643 B1 V2
[4,] 4 82.019267 86.958215 3.335632 44.19048 46.29047 A1 G2
[5,] 5 24.980403 25.352212 78.240760 93.69818 46.64401 C1 R2
[6,] 6 1.062644 30.214449 15.920193 35.15496 97.86995 F1 U2
[7,] 7 5.242374 47.591899 56.879902 70.05319 82.48689 T1 P2
[8,] 8 69.646271 69.576102 38.766948 38.62866 74.69404 Y1 Q2
[9,] 9 25.335255 54.638416 5.777238 80.87692 34.11951 S1 A2
[10,] 10 54.844424 18.645826 59.370042 48.24352 84.02630 S1 R2
Я пытаюсь агрегировать данные по V1 и V2
* * 1010
Проблема, с которой я столкнулся, заключается в том, что, если я не знаю явно имена столбцов, по которым я хочу агрегировать, или если я хочу просмотреть, скажем, 100 столбцов, получая 100 различных агрегатов, как я могу это сделать?
Справочное руководство по data.table говорит, что это работает так, как работает, поскольку на переменные ссылаются в области действия таблицы данных, поэтому CC [, V1] даст один столбец, тогда как CC [, "V1"] победил «т. Он говорит, что вы можете использовать что-то вроде
x <- quote(V1)
CC[,length(one), by=eval(x)]
Но это, похоже, не работает, я пробовал несколько вещей, таких как установка имен переменных в векторе и различные комбинации quote (), noquote (), enquote (), но я не могу показаться выяснить, если это возможно.
Как я могу настроить это, чтобы циклически проходить список имен столбцов, агрегирующих по каждому?
Если нет, то есть ли лучшие способы быстрого агрегирования большого набора данных, как этот?
Спасибо.