当我在 R 中使用聚合时,我可以将总和应用于每一行吗?

Posted

技术标签:

【中文标题】当我在 R 中使用聚合时,我可以将总和应用于每一行吗?【英文标题】:Can I apply the sum to every row when I use aggregate in R [closed] 【发布时间】:2018-12-23 13:06:50 【问题描述】:

当我使用聚合(或任何其他更好的函数)时,如何将总和应用于每一行?非常感谢您的帮助!XD

原始数据

Categories  vaule
A1           5
A2           3
C            2
B1           6
A3           1
B2           5

目标

 Categories Groups  SUM of the Group
    A1            A     9
    A2            A     9
    C             C     2
    B1            B     11
    A3            A     9
    B2            B     11

【问题讨论】:

欢迎来到 ***。请花一些时间重新组织您的问题,您可以参考“What topics can I ask about here?”和how to ask good questions。 试试library(dplyr); df1 %>% group_by(Groups = str_remove(Categories, "\\d+")) %>% mutate(SUMOFGROUP = sum(value)) 请不要使用图片作为数据。以可以复制和粘贴到 R 的形式提供数据。您可以使用dput(x) 以可复制的形式提供x 【参考方案1】:

我们可以使用tidyverse。通过删除“类别”中的一位或多位数字(stringr 中的str_remove)然后 mutate 以在按“组”分组后获得“值”的sum 来创建“组”

library(tidyverse)
df1 %>% 
   group_by(Groups = str_remove(Categories, "\\d+")) %>%
   mutate(SUMOFGROUP = sum(value)) %>% 
   select(-value)
# A tibble: 6 x 3
# Groups:   Groups [3]
#  Categories Groups SUMOFGROUP
#  <chr>      <chr>       <int>
#1 A1         A               9
#2 A2         A               9
#3 C          C               2
#4 B1         B              11
#5 A3         A               9
#6 B2         B              11

数据

df1 <- structure(list(Categories = c("A1", "A2", "C", "B1", "A3", "B2"
 ), value = c(5L, 3L, 2L, 6L, 1L, 5L)), .Names = c("Categories", 
 "value"), class = "data.frame", row.names = c(NA, -6L))

【讨论】:

【参考方案2】:

使用最后注释中定义的DF 这是一个基本解决方案:

Group <- gsub("\\d", "", DF$Category)
transform(DF, Value = NULL, Group = Group, Sum = ave(Value, Group, FUN = sum))

给予:

  Category Group Sum
1       A1     A   9
2       A2     A   9
3        C     C   2
4       B1     B  11
5       A3     A   9
6       B2     B  11

注意

可重现形式的输入DF 是:

Lines <- 
"Category Value
A1 5
A2 3
C 2
B1 6
A3 1
B2 5"
DF <- read.table(text = Lines, header = TRUE, as.is = TRUE)

【讨论】:

我不得不使用read.table(textConnection(Lines), …),而不是read.table(text = Lines, …) 这应该没有必要。再试一次。 我肯定不会再试一次,因为你应该知道,重复同样的事情并期待不同的结果是精神错乱的表现。 将 R 升级到最新版本并在全新的原版会话中试用。有问题,因为 text= 确实可以作为 read.table 的参数。 正如您似乎通过建议“升级 R”所怀疑的那样,行为可能会因 R 的不同版本而有所不同,这并没有错。既然我可以很容易地让它工作,我就不用费心“升级”了。

以上是关于当我在 R 中使用聚合时,我可以将总和应用于每一行吗?的主要内容,如果未能解决你的问题,请参考以下文章

在 SQLite 中计算多个聚合时可以消除子查询吗?

由于 R 中的数据集大小而需要聚合时如何访问未聚合的结果

Hive 在使用 case 语句和聚合时按列分组出错

将标量函数应用于每一行

有这个 mysql 查询我希望使用多个条件总和。当我在同一行中使用 2 个 where 时,它​​显示一个错误

是否有将函数应用于每对列的 R 函数?