繁体   English   中英

使用 dplyr 根据来自另一列的值的总和创建一个新列

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM