簡體   English   中英

R:使用組參考計算行中值之間的差異

[英]R: Calculate difference between values in rows with group reference

這是我的 df:

group value
1     10
1     20
1     25
2     5
2     10
2     15 

我現在想計算組的每個值與參考值之間的差異,參考值是組的第一行。 更確切地說:

group value diff
1     10    NA # because this is the reference for group 1
1     20    10 # value[2] - value[1]
1     25    15 # value[3] - value[1]
2     5     NA # because this is the reference for group 2
2     10    5  # value[5] - value[4]
2     15    10 # value[6] - value[4]

我找到了上一行的不同分數的好答案(例如,dpylr 中的滯后函數,data.table 中的移位函數)。 但是,我正在尋找一個固定的參考點,但我無法使其工作。

試試下面的代碼

transform(
    df,
    Diff = ave(value, group, FUN = function(x) c(NA, diff(x)))
)

這使

  group value Diff
1     1    10   NA
2     1    20   10
3     1    25    5
4     2     5   NA
5     2    10    5
6     2    15    5
df <-
  structure(list(
    group = c(1L, 1L, 1L, 2L, 2L, 2L),
    value = c(10L,
              20L, 25L, 5L, 10L, 15L)
  ),
  class = "data.frame",
  row.names = c(NA,
                -6L))

library(tidyverse)
df %>% 
  group_by(group) %>% 
  mutate(DIFF = ifelse(row_number() == 1, NA, value - first(value))) %>% 
  ungroup()
#> # A tibble: 6 x 3
#>   group value  DIFF
#>   <int> <int> <int>
#> 1     1    10    NA
#> 2     1    20    10
#> 3     1    25    15
#> 4     2     5    NA
#> 5     2    10     5
#> 6     2    15    10

reprex 包( v2.0.0 ) 於 2021 年 6 月 18 日創建

我想你也可以使用這個:

library(dplyr)
df %>%
  group_by(group) %>%
  mutate(diff = value - value[1], 
         diff = replace(diff, row_number() == 1, NA))

# A tibble: 6 x 3
# Groups:   group [2]
  group value  diff
  <int> <int> <int>
1     1    10    NA
2     1    20    10
3     1    25    15
4     2     5    NA
5     2    10     5
6     2    15    10

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM