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