[英]Create a new column based on the sum of values from another column, with dplyr
我想创建一个名为 POPULATION 的新变量,它占用由变量 CODASC 分组的变量 P1 的值的总和。 一开始对我来说似乎很容易,但我最终在挣扎。 由于我必须对许多变量和多个数据集执行此操作,因此我真的需要一种快速的方法! 如果有人可以帮助我,我将不胜感激! 非常感谢,伊拉里亚
我的数据框看起来像这样:
PROCOM SEZ2011 SEZ CODASC P1 P47 P62 P131 E1 E3 ST15 A46
<int> <dbl> <int> <int> <int> <int> <int> <int> <int> <int> <int> <int>
1 48017 480000000000 60001 4 251 25 9 20 70 40 19 20
2 48017 480000000000 60002 3 15 1 0 1 4 4 0 3
3 48017 480000000000 60003 2 20 7 2 1 1 1 1 1
4 48017 480000000000 60004 3 253 21 4 10 63 40 49 22
5 48017 480000000000 60005 5 3 0 1 0 1 1 0 2
6 48017 480000000000 60006 1 161 19 7 5 27 17 26 13
>
我的代码看起来像这样:
df <- df %>%
group_by(CODASC) %>%
mutate(POPULATION = sum(P1 , na.rm= T))
要跨多个变量应用组内的总和,您可以执行以下操作,例如:
library(dplyr)
df %>%
group_by(CODASC) %>%
mutate(across(P1:last_col(), sum, .names = "{.col}_sum")) %>%
ungroup()
要将其应用于多个数据框(如果您按相同的变量分组并对相同的列求和),如果它们在列表中并使用purrr
库,您可以轻松地遍历它们:
library(purrr)
library(dplyr)
l <- list(df, df, df)
map(l, ~ .x %>%
group_by(CODASC) %>%
mutate(across(P1:last_col(), sum, .names = "{.col}_sum")) %>%
ungroup())
您的代码看起来像您想要的那样,但您只是在寻找一种将其简化为多列的方法?
看起来您的前 4 列是一些标识符。 如果要汇总所有剩余的列,可以执行以下操作:
df <- df %>%
group_by(PROCOM, SEZ2011, SEZ, CODASC) %>%
summarise_all(sum) ## or whatever function you want here
有关summarise_all()
或summarise_at()
更多详细信息,请参阅https://dplyr.tidyverse.org/reference/summarise_all.html 。
如果你想创建一个函数来应用于许多数据集,也许可以查看制作函数: https : //swcarpentry.github.io/r-novice-inflammation/02-func-R/并应用函数
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.