如何在R中转换一组列并动态重命名它们?

如何在R中转换一组列并动态重命名它们?,r,dplyr,R,Dplyr,我有一个数据帧(“df”),它有大约50列,我想 (1) 与列“weight”(df$weight)相乘,然后 (2) 按组求和(df$大地水准面)。 我想在我的数据框中添加一个带乘积的列(“var.prod”)和一个带总和的列(“var.sum”) 我已经知道如何手动完成这项工作,但我想知道是否有更快或更优雅的解决方案。我是R的新手,所以任何反馈都会非常有用——提前谢谢 这就是我到目前为止所尝试的(在这个例子中我只列出了6个变量) 这是我的预期输出: GEOID gini weig

我有一个数据帧(“df”),它有大约50列,我想 (1) 与列“weight”(df$weight)相乘,然后 (2) 按组求和(df$大地水准面)。 我想在我的数据框中添加一个带乘积的列(“var.prod”)和一个带总和的列(“var.sum”)

我已经知道如何手动完成这项工作,但我想知道是否有更快或更优雅的解决方案。我是R的新手,所以任何反馈都会非常有用——提前谢谢

这就是我到目前为止所尝试的(在这个例子中我只列出了6个变量)

这是我的预期输出:

 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

我们可以在

library(dplyr)
library(stringr)
df <- df %>%
         group_by(GEOID) %>%
          mutate_at(vars(str_c(vlist, ".prod")), 
             list(sum =  ~ sum(., na.rm = TRUE)))

使用
data.table
,您可以执行以下操作:

库(data.table)
setDT(df)

请提供样本数据(标准数据集或
dput(…)
data.frame(…)
)和您的预期输出。谢谢——这正是我要找的。你知道我如何为这些总和创建新的列名(在我的数据框中)吗?@trinitysara更新了帖子。您可以使用
列表
包装一个名称,它会将后缀作为新列附加到列名中感谢您的更新!我收到以下错误“错误:应为单面公式、函数或函数名”。不确定原因,但我将尝试处理代码。@trinitysara抱歉,这是因为
na.rm=TRUE
,您现在可以检查吗
 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
library(dplyr)
library(stringr)
df <- df %>%
         group_by(GEOID) %>%
          mutate_at(vars(str_c(vlist, ".prod")), 
             list(sum =  ~ sum(., na.rm = TRUE)))
df <- df %>%
        group_by(GEOID) %>%
        mutate(across(str_c(vlist, ".prod")), list(sum = sum)))