【问题标题】:How to calculate difference between two groups considering other columns groups考虑其他列组如何计算两组之间的差异
【发布时间】:2021-11-24 20:09:18
【问题描述】:

考虑到date1side,我正在努力计算carmeasure 之间的差异,即我想获得侧面@987654325 之间的差异@ 和边上的B 相同的car 相同的date1

这是一个玩具示例(在我的实际问题中,我有几辆车和日期......)

test = data.frame(date1= c("20-09-2020", "25-10-2020", "26-10-2020", "27-10-2020", "30-10-2020", "20-09-2020", "25-10-2020", "26-10-2020", "27-10-2020", "30-10-2020"),
                  side = c("A", "A", "A", "A", "A", "B", "B", "B",  "B", "B"), 
                  car = c("46-1", "46-2", "47-1", "46-3", "46-4", "46-1", "46-2", "47-1", "46-3", "46-4"),
                  measure = c(55,34,45,64,13, 52,33,42,60,11))
# test
#         date1 side  car measure
# 1  20-09-2020    A 46-1      55
# 2  25-10-2020    A 46-2      34
# 3  26-10-2020    A 47-1      45
# 4  27-10-2020    A 46-3      64
# 5  30-10-2020    A 46-4      13
# 6  20-09-2020    B 46-1      52
# 7  25-10-2020    B 46-2      33
# 8  26-10-2020    B 47-1      42
# 9  27-10-2020    B 46-3      60
# 10 30-10-2020    B 46-4      11

#I'd like something like
reult
# test
#         date1    car      abs.difference.side
# 1  20-09-2020    46-1      3
# 2  25-10-2020    46-2      1
# 3  26-10-2020    47-1      3
# 4  27-10-2020    46-3      4
# 5  30-10-2020    46-4      2

也许我可以使用类似的东西:

  group_by(date1, car) %>%
  mutate(diference = abs( measure.side.A - measure.side.B))

任何提示我该怎么做?

【问题讨论】:

    标签: r dataframe dplyr


    【解决方案1】:

    我们可以使用diffrange

    library(dplyr)
    test %>% 
       group_by(date1, car) %>%
       summarise(abs.diff = diff(range(measure)), .groups = 'drop')
    

    -输出

    # A tibble: 5 × 3
      date1      car   abs.diff
      <chr>      <chr>    <dbl>
    1 20-09-2020 46-1         3
    2 25-10-2020 46-2         1
    3 26-10-2020 47-1         3
    4 27-10-2020 46-3         4
    5 30-10-2020 46-4         2
    

    【讨论】:

      【解决方案2】:

      您可以这样做(假设您的数据中只有 A 面和 B 面):

      library(tidyverse)
      
      test |> 
        group_by(date1, car) |> 
        summarize(abs.diff = max(measure) - min(measure))
      

      给出:

      # A tibble: 5 x 3
      # Groups:   date1 [5]
        date1      car   abs.diff
        <chr>      <chr>    <dbl>
      1 20-09-2020 46-1         3
      2 25-10-2020 46-2         1
      3 26-10-2020 47-1         3
      4 27-10-2020 46-3         4
      5 30-10-2020 46-4         2
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多