【问题标题】:Class totals on each row in an R dataframe [duplicate]R数据框中每一行的类总计[重复]
【发布时间】:2022-01-22 10:10:59
【问题描述】:

我在 R 中有如下数据框:

df <- matrix(c('A','A','A','A','B','B','B','B','C','C','C','C',4,6,8,2,2,7,2,8,9,1,2,5),ncol=2)

对于这个数据框的每一行,我想包括每个类(A、B、C)的总值,以便数据框看起来像这样:

df <- matrix(c('A','A','A','A','B','B','B','B','C','C','C','C',4,6,8,2,2,7,2,8,9,1,2,5,20,20,20,20,19,19,19,19,17,17,17,17),ncol=3)

我有什么办法可以做到这一点?

提前感谢您的帮助。

【问题讨论】:

  • 您有矩阵,而不是数据框(因为您明确使用了matrix() 函数)。您可能确实需要数据框,因为矩阵只能保存一种数据类型,但数据框可以在每一列中保存不同的数据类型。
  • 将数据放入数据框中后,您应该能够使用链接的常见问题解答中的任何答案来添加新列。使用dplyr 并从您的矩阵开始,您可以执行library(dplyr); df %&gt;% as.data.frame %&gt;% group_by(V1) %&gt;% mutate(V2 = as.numeric(V2), total = sum(V2))

标签: r dataframe


【解决方案1】:

使用 R 基础

df <- data.frame(df)
df$Total <-  ave(as.numeric(df$X2), df$X1, FUN=sum)

【讨论】:

    【解决方案2】:

    dplyr 的解决方案是这样的:

    data.frame(df) %>%
      group_by(X1) %>%
      mutate(Sum = sum(as.numeric(X2)))
    # A tibble: 12 × 3
    # Groups:   X1 [3]
       X1    X2      Sum
       <chr> <chr> <dbl>
     1 A     4        20
     2 A     6        20
     3 A     8        20
     4 A     2        20
     5 B     2        19
     6 B     7        19
     7 B     2        19
     8 B     8        19
     9 C     9        17
    10 C     1        17
    11 C     2        17
    12 C     5        17
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-11-10
      • 1970-01-01
      • 2021-05-23
      • 1970-01-01
      • 2016-10-14
      • 2018-09-11
      • 1970-01-01
      相关资源
      最近更新 更多