У меня есть data.frame 32x43 с именем "allg2", и я воссоздал небольшую его часть здесь как 5x5 для простоты:
gneiss mylonite syenite sedimentary Catg
0 3 4 0 -105.7
2 90 1 0 -99.7
15 51 0 0 -95.25
6 0 0 0 -90.5
0 3 9 0 -85.45
В соответствии с запросом пример расчета: столбец «гнейс» будет равен wm=(0/21*-105,7)+(2/21*-99,7)+(15/21*-95,25)+(6/21*-90,5). )+(0/21*-85,45)
Я хотел бы взвешенное среднее значение для каждого столбца (с интересующими значениями в Catg и каждым столбцом в качестве весов для этого столбца), но каждое решение, которое я могу найти, зависит от кодирования во всех именах столбцов. Можно ли это сделать без такого списка? Примечание. Я только что понял, что все время переворачивал веса и значения для взвешивания. Мои попытки:
wm=allg2[,lapply(.SD,weighted.mean,w=Catg),by=list(allg2[1,])]
Error: unused argument (by = list(allg2[1, ]))
Я нашел эту идею в этой теме и попытался адаптировать ее к моей ситуации. . Разве это не выбор имен столбцов, потому что они не являются истинной строкой? Я действительно не знаю, что это делает, и я попытался удалить часть by=, что дает ошибку
Error in lapply(.SD, weighted.mean, w = Catg) : object '.SD' not found
Другая попытка была основана на этой теме. «Catg» находится в 43-м столбце, поэтому я попытался организовать строку следующим образом:
wm=apply(allg2, 2, function(x) weighted.mean(x[,43], x[,1:42]))
Error in x[, 43] : incorrect number of dimensions
Я действительно не понимаю эту ошибку, потому что мой столбец весов должен быть в [,43].
Я также пробовал:
mallg=data.matrix(allg2)
wm=colWeightedMeans(mallg,allg2$Catg)
Error in colWeightedMeans.matrix(mallg, allg2$Catg) : Argument 'w' has negative weights.
Я действительно в недоумении здесь. Я делаю небольшую ошибку или я делаю это совершенно неправильно?
data.table
. Вы используете кодdata.table
для фреймов данных в своей первой ошибочной попытке, и это просто не способ добиться успеха. - person IRTFM   schedule 30.11.2013