我有下面的数据框,显示了抽样事件,当观察到每个人时,我想要一个新的列,显示当前观察和上一次最近观察之间的抽样事件的数量.

我所拥有的是这样的:

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=(OBS[i]处的事件)-(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

我确信我在这里遗漏了一些明显的东西,我try 了group_by(ind) %>% mutate()参数中的各种Case_When()和If_Else()条件,但不能完全弄清楚这一点.

先谢谢你

推荐答案

获取包含未命中事件的子集并连接回原始数据帧

df %>%
  filter(!is.na(obs)) %>%
  mutate(missed.events=event-lag(event)-1, .by=ind) %>%
  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

R相关问答推荐

如何根据条件计算时差(天)

R Tidymodels textercipes-使用spacyR进行标记化-如何从生成的标记列表中删除标点符号

在垂直轴中包含多个ggplot2图中的平均值

如何利用模型函数在格图中添加双曲/指数曲线

使用外部文件分配变量名及其值

如何得到每四个元素向量R?

打印XTS对象

R Select()可以测试不存在的子集列

在不丢失空值的情况下取消列出嵌套列表

解析R函数中的变量时出现的问题

将二进制数据库转换为频率表

将选定的索引范围与阈值进行比较

如何删除设置大小的曲线图并添加条形图顶部数字的百分比

Rmarkdown::Render vs Source()

R-找出存在其他变量的各种大小的所有组合

如何使投篮在R中保持一致

条形图中的条形图没有try 赋予它们的 colored颜色

将y轴格式更改为R中的百分比

如何准确地指出Read_delim所面临的问题?

R data.设置函数&;连接中的列值而不使用for循环的表方法?