[英]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
我想你也可以使用這個:
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.