У меня есть фрейм данных ("df"), который содержит ~ 50 столбцов, которые я хотел бы (1) умножить на столбец "weight" (df $ weight), а затем (2) сложить вместе по группам (df $ ГЕОИД). Я хотел бы добавить как столбец с продуктом ("var.prod"), так и столбец с суммой ("var.sum") к моему фрейму данных.
Я выяснил, как это сделать несколько вручную, но я хотел знать, есть ли более быстрое или более элегантное решение. Я новичок в R, поэтому любые отзывы были бы очень полезны - спасибо заранее!
Это то, что я пробовал до сих пор (в этом примере я перечисляю только 6 переменных).
vlist <- c("gini", "pov", "medinc", "pop", "inc", "pct.unemploy")
for (v in vlist) {
df[paste0(v,".prod")] <- df[paste0(v)]*df$weight
}
df <- df %>%
group_by(GEOID) %>%
mutate(gini.sum = sum(gini.prod),
pov.sum = sum(pov.prod),
medinc.sum = sum(medinc.prod),
pop.sum = sum(pop.prod),
inc.sum = sum(inc.prod),
pct.unemploy.sum = sum(pct.unemploy.prod))
** Кроме того, я работаю с пространственным фреймом данных, поэтому не могу использовать функции data.table. **
РЕДАКТИРОВАНИЕ ДОБАВИТЬ: Я работаю с ограниченными данными, поэтому, к сожалению, я не могу поделиться своими данными. Но теперь это пример моих данных:
GEOID gini weight
1 0.31 0.8
1 0.45 0.2
2 0.37 1
3 0.42 1
И это мой предполагаемый вывод:
GEOID gini weight gini.prod gini.sum
1 0.31 0.8 0.248 0.338
1 0.45 0.2 0.09 0.338
2 0.37 1 0.37 0.37
3 0.42 1 0.42 0.42