当前位置: 首页 > 知识库问答 >
问题:

按组求和多个变量并使用它们的总和创建新列

燕航
2023-03-14

我有一个带有分组变量的数据帧,我想按组对它们求和。使用dplyr很容易。

library(dplyr)
library(magrittr)

data <- data.frame(group = c("a", "a", "b", "c", "c"), n1 = 1:5, n2 = 2:6)

data %>% group_by(group) %>%
  summarise_all(sum)

# A tibble: 3 x 3
   group    n1    n2
  <fctr> <int> <int>
1      a     3     5
2      b     3     4
3      c     9    11

但是现在我想要一个新的列,按组计算n1和n2的总和。这样地:

# A tibble: 3 x 3
   group    n1    n2   ttl
  <fctr> <int> <int> <int>
1      a     3     5     8
2      b     3     4     7
3      c     9    11    20

我如何使用dplyr?

编辑:实际上,这只是一个例子,我有很多变量。

我试过这两个代码,但它不在正确的维度上......

data %>% group_by(group) %>%
  summarise_all(sum) %>%
  summarise_if(is.numeric, sum)

data %>% group_by(group) %>%
  summarise_all(sum) %>%
  mutate_if(is.numeric, .funs = sum)

共有3个答案

万俟小林
2023-03-14

基数R

cbind(aggregate(.~group, data, sum), ttl = sapply(split(data[,-1], data$group), sum))
#  group n1 n2 ttl
#a     a  3  5   8
#b     b  3  4   7
#c     c  9 11  20
松德曜
2023-03-14

我们可以将应用与dplyr函数一起使用。

data <- data.frame(group = c("a", "a", "b", "c", "c"), n1 = 1:5, n2 = 2:6)

data %>% group_by(group) %>%
  summarise_all(sum) %>%
  mutate(ttl = apply(.[, 2:ncol(.)], 1, sum))

# A tibble: 3 × 4
   group    n1    n2   ttl
  <fctr> <int> <int> <int>
1      a     3     5     8
2      b     3     4     7
3      c     9    11    20

或者rowSums使用相同的策略。关键是使用指定数据帧,[]使用x: ncol(.)保留您想要的列。

data %>% group_by(group) %>%
  summarise_all(sum) %>%
  mutate(ttl = rowSums(.[, 2:ncol(.)]))

# A tibble: 3 × 4
   group    n1    n2   ttl
  <fctr> <int> <int> <dbl>
1      a     3     5     8
2      b     3     4     7
3      c     9    11    20
陈坚
2023-03-14

您可以在总结之后使用Mutate

data %>% 
    group_by(group) %>%
    summarise_all(sum) %>% 
    mutate(tt1 = n1 + n2)

# A tibble: 3 x 4
#   group    n1    n2   tt1
#  <fctr> <int> <int> <int>
#1      a     3     5     8
#2      b     3     4     7
#3      c     9    11    20

如果需要对所有数值列求和,您可以使用带有select_If(选择数值列)的行和对列求和:

data %>% 
    group_by(group) %>%
    summarise_all(sum) %>% 
    mutate(tt1 = rowSums(select_if(., is.numeric)))

# A tibble: 3 x 4
#   group    n1    n2   tt1
#  <fctr> <int> <int> <dbl>
#1      a     3     5     8
#2      b     3     4     7
#3      c     9    11    20
 类似资料:
  • 我在ID号中包含姓名数据以及许多关联值。它看起来像这样: 我想创建名称的所有组合,不管有多少个,并将它们粘贴在一起,用逗号分隔,并在每个id中求其编号和值的总和。上述示例的预期输出为: 谢谢大家!

  • 我试图在一个数据集中的多个主题上求和多个变量。我知道如何使用plyr包来实现这一点;然而,由于数据集的长度,变量的数量,以及我试图做的不同滚动和的数量(2天,3天,4天等)。我想知道是否有人有更多的时间,更有效的方式来完成这项任务在DPLYR。 我的数据与此类似: 谢谢你。

  • 我想用多个变量分组,用数字求和,用java中的list得到结果。与SQL group by一样,我希望将数据记录与最低的字符串合并。我想做的与下面的SQL相同, 如果数据存在于下面的项目表中, 我预计结果会在下面。当用orderId按00-82-947和00-82-952分组时,我想像SQL分组一样得到较低的一个。 如何在Java中实现这一点?我认为这对我来说是可行的,但在这种情况下,未按分组的o

  • 问题内容: 我正在寻找使用for循环来创建多个在迭代(i)上命名的变量,并为每个变量分配一个唯一的int。 如您所见,我迷路了。理想情况下,我正在寻找输出 有什么建议? 问题答案: 您可以一站式完成所有操作 然后您可以使用 但是使用列表而不是字典可能更好 然后您可以使用 甚至(获得前三个学期)

  • 问题内容: 我想用Python(不是数组)中的一个创建10个变量。像这样: 我想创建的变量名,在这种情况下: ,,,…, 我不想一个数组 我有一个坐标图(640 x 480)。我正在确定像素颜色为白色的坐标。地面上有3个球,我想获取每个球的中心坐标,因此,如果要评估的坐标距离最后一个球很近,则x和y坐标将被平均(如果该坐标属于a)新球的坐标将属于新坐标组。 问题答案: 您不应该这样做,但是如果您真

  • 我有一个国家和年份级别的面板数据集,我想根据现有的变量创建两个新变量。 我想做的是创建两个新变量集:(1)每年(跨国家)平均值的变量集和(2)国家/地区值相对于年平均值的变量集。例如,对于 var1(1) 将产生 mean_var1 和 (2) relmean_var1我希望这些变量用于所有其他变量。总的来说,数据集中有超过1000个变量,但我只将此函数应用于大约6个。 我有适用于第一部分的代码,