【问题标题】:R data.table: Merge conditional summary of a data.table back to the original data.table in one statementR data.table:在一个语句中将data.table的条件摘要合并回原始data.table
【发布时间】:2019-12-17 06:06:02
【问题描述】:

我有以下虚拟数据 -

dummyData = data.table(A = c(2,2,2,3,4,2,3,2,4,3), B = c(1.2, 3.2, 4.3, 3.1, 5.4, 6.6, 3.5, 3.2, 4.2, 2.3), desired_Result = c(18.5, 18.5, 18.5, 18.5, 18.5, 18.5, 18.5, 18.5, 18.5, 18.5))

我想在这个 data.table 中添加一个新列,如下所示 - 在 B 列中选择 A == 2 的值,然后添加这些值并在原始 data.table 中创建一个新列 C

我不想要基于 A 组的 B 的总和,但结果应该只有 B 列的总和,其中 A == 2。以下是我尝试过的代码,但它给了我汇总的 data.table

dummyData[, actual_Result := sum(B), by = A]

下面应该是输出

    A   B desired_Result actual_Result
 1: 2 1.2           18.5          18.5
 2: 2 3.2           18.5          18.5
 3: 2 4.3           18.5          18.5
 4: 3 3.1           18.5          18.5
 5: 4 5.4           18.5          18.5
 6: 2 6.6           18.5          18.5
 7: 3 3.5           18.5          18.5
 8: 2 3.2           18.5          18.5
 9: 4 4.2           18.5          18.5
10: 3 2.3           18.5          18.5

以下代码在 A 为 3 或 4 的行中给出 NA,我需要 actual_Result 中的所有行的值都为 18.5

dummyData[A == 2, actual_Result := sum(B), by = A]

    A   B desired_Result actual_Result    C
 1: 2 1.2           18.5          18.5 18.5
 2: 2 3.2           18.5          18.5 18.5
 3: 2 4.3           18.5          18.5 18.5
 4: 3 3.1           18.5           8.9   NA
 5: 4 5.4           18.5           9.6   NA
 6: 2 6.6           18.5          18.5 18.5
 7: 3 3.5           18.5           8.9   NA
 8: 2 3.2           18.5          18.5 18.5
 9: 4 4.2           18.5           9.6   NA
10: 3 2.3           18.5           8.9   NA

【问题讨论】:

    标签: r data.table


    【解决方案1】:

    你可以的

    library(data.table)
    dummyData[, actual_Result := sum(B[A == 2])]
    
    dummyData
    #    A   B desired_Result actual_Result
    # 1: 2 1.2           18.5          18.5
    # 2: 2 3.2           18.5          18.5
    # 3: 2 4.3           18.5          18.5
    # 4: 3 3.1           18.5          18.5
    # 5: 4 5.4           18.5          18.5
    # 6: 2 6.6           18.5          18.5
    # 7: 3 3.5           18.5          18.5
    # 8: 2 3.2           18.5          18.5
    # 9: 4 4.2           18.5          18.5
    #10: 3 2.3           18.5          18.5
    

    使用base R是

    dummyData$actual_Result <- sum(dummyData$B[dummyData$A == 2])
    

    【讨论】:

      【解决方案2】:

      dplyr,我们可以使用

      library(dplyr)
      dummyData %>%
          mutate(actual_Result = sum(B[A ==2]))
      

      【讨论】:

        猜你喜欢
        • 2014-10-23
        • 1970-01-01
        • 2019-04-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多