根据列 A 中的差异改变列,行由列 B 中的相对值标识

问题描述 投票:0回答:1

我有下面的数据框,显示采样事件,当观察每个个体时,我想要一个新列,显示当前观察与个体之前最近观察之间的采样事件数量。

所以我有的是这样的:

tibble(ind=c(rep("A",10),rep("B",10)),
   event=c(c(1:10),c(1:10)),
   obs=c(NA,NA,1,2,NA,NA,NA,4,NA,5,1,NA,NA,NA,2,NA,3,4,NA,5))

    # A tibble: 20 × 3
   ind   event   obs
   <chr> <int> <dbl>
 1 A         1    NA
 2 A         2    NA
 3 A         3     1
 4 A         4     2
 5 A         5    NA
 6 A         6    NA
 7 A         7    NA
 8 A         8     4
 9 A         9    NA
10 A        10     5
11 B         1     1
12 B         2    NA
13 B         3    NA
14 B         4    NA
15 B         5     2
16 B         6    NA
17 B         7     3
18 B         8     4
19 B         9    NA
20 B        10     5

我想要的是这个,其中missed.events = (event at obs[i])-(event at obs[i-1])-1:

# A tibble: 20 × 4
   ind   event   obs missed.events
   <chr> <int> <dbl>         <dbl>
 1 A         1    NA            NA
 2 A         2    NA            NA
 3 A         3     1            NA
 4 A         4     2             0
 5 A         5    NA            NA
 6 A         6    NA            NA
 7 A         7    NA            NA
 8 A         8     4             3
 9 A         9    NA            NA
10 A        10     5             1
11 B         1     1            NA
12 B         2    NA            NA
13 B         3    NA            NA
14 B         4    NA            NA
15 B         5     2             3
16 B         6    NA            NA
17 B         7     3             1
18 B         8     4             0
19 B         9    NA            NA
20 B        10     5             1

我确信我在这里遗漏了一些明显的东西,并且我已经在

group_by(ind) %>% mutate()
参数中尝试了各种 case_when() 和 if_else() 条件,但无法完全弄清楚这一点。

提前致谢

r conditional-statements time-series mutate
1个回答
0
投票

获取丢失事件的子集并连接回原始数据帧

df %>%
  filter(!is.na(obs)) %>%
  group_by(ind) %>%
  mutate(missed.events=event-lag(event)-1) %>%
  ungroup %>%
  right_join(df)

Joining, by = c("ind", "event", "obs")
# A tibble: 20 x 4
   ind   event   obs missed.events
   <chr> <int> <dbl>         <dbl>
 1 A         1    NA            NA
 2 A         2    NA            NA
 3 A         3     1            NA
 4 A         4     2             0
 5 A         5    NA            NA
 6 A         6    NA            NA
 7 A         7    NA            NA
 8 A         8     4             3
 9 A         9    NA            NA
10 A        10     5             1
11 B         1     1            NA
12 B         2    NA            NA
13 B         3    NA            NA
14 B         4    NA            NA
15 B         5     2             3
16 B         6    NA            NA
17 B         7     3             1
18 B         8     4             0
19 B         9    NA            NA
20 B        10     5             1
© www.soinside.com 2019 - 2024. All rights reserved.