【问题标题】:Subtract Group Values in Data.Table减去 Data.Table 中的组值
【发布时间】:2023-04-02 20:15:01
【问题描述】:
data = data.frame(GROUP = c(1,2,3,4,1,2,3,4),
                  TYPE = c(0,0,0,0,1,1,1,1),
                  VALUE = c(1,6,9,3,5,0,2,3),
                  WANT = c(4,-6,-7,0))

我有这里显示的“数据”。我想从每个 GROUP 的 TYPE=1 中减去 TYPE=0 的 VALUE 并存储在新变量 WANT 中。

【问题讨论】:

    标签: r dplyr data.table


    【解决方案1】:

    在像你这样的数据中,你可以使用:

    data[, .(WANT = diff(VALUE)), by = GROUP][data, on = "GROUP"]
    

    甚至更简单:

    data[, WANT := diff(VALUE), by = GROUP]
    

    【讨论】:

      【解决方案2】:

      tidyverse

      library(dplyr)
      library(tidyr)
      data %>%
        select(-WANT) %>%
        pivot_wider(GROUP, names_from = TYPE, values_from = VALUE) %>%
        mutate(GET = `1` - `0`) %>%
        pivot_longer(`0`:`1`, names_to = "TOPIC", values_to = "VALUE") %>%
        arrange(TOPIC, GROUP)
      # # A tibble: 8 x 4
      #   GROUP   GET TOPIC VALUE
      #   <dbl> <dbl> <chr> <dbl>
      # 1     1     4 0         1
      # 2     2    -6 0         6
      # 3     3    -7 0         9
      # 4     4     0 0         3
      # 5     1     4 1         5
      # 6     2    -6 1         0
      # 7     3    -7 1         2
      # 8     4     0 1         3
      

      数据表

      library(data.table)
      tmp1 <- dcast(as.data.table(data), GROUP ~ TYPE, value.var = "VALUE")[, GET := `1` - `0`]
      melt(tmp1, id.vars = c("GROUP", "GET"), variable.name = "TOPIC", value.name = "VALUE")
      #    GROUP GET TOPIC VALUE
      # 1:     1   4     0     1
      # 2:     2  -6     0     6
      # 3:     3  -7     0     9
      # 4:     4   0     0     3
      # 5:     1   4     1     5
      # 6:     2  -6     1     0
      # 7:     3  -7     1     2
      # 8:     4   0     1     3
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-12-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-25
        • 2015-02-12
        • 2022-09-23
        相关资源
        最近更新 更多