У меня есть следующая data.table
# id category sales Num share
# 1: 1 a -0.25174915 -0.2130797 -0.67909764
# 2: 2 a -0.35569766 0.6014930 0.35201386
# 3: 3 a -0.31600957 0.4398968 -1.15475814
# 4: 4 b -0.54113762 -2.3497952 0.64503654
# 5: 5 c -0.25174915 -0.2130797 -0.67909764
# 6: 6 b -0.35569766 0.6014930 0.35201386
# 7: 7 c -0.31600957 0.4398968 -1.15475814
# 8: 8 a -0.54113762 -2.3497952 0.64503654
В настоящее время я выполняю следующие операции для получения анализа PCA по категориям:
PCA <- prcomp(df[category == a, .(sales, Num, share)], center = T, scale. = T)
df$score <- apply(df[category == a, .(sales, Num, share), ], 1, function(x) sum(x*PCA$rotation))
Однако эта операция толькоэто для одной конкретной категории, и я хотел бы выполнить это отдельно для всех категорий в DF. Я пытался сделать следующее:
pca.weighting <- function(df,y) {
PCA <- prcomp(df[, y], center = T, scale. = T)
scores <- apply(df[, y, ], 1, function(x) sum(x*PCA$rotation))
return(scores)
}
df[, lapply(.SD, function(x) pca.weighting(df,x) ), by = 'category', .SDcols = c('sales', 'Num', 'share')]
Однако я получаю только ошибки. Что я делаю неправильно ? Любое понимание будет оценено.