R:增加不均匀大小的向量之间的差异
R: get difference between increasing vectors of uneven size
我有两个年份序列,都随着时间的推移而增加。数据以 5 年的时间步长记录。有时,在年份和事件发生之间(如果没有发生则为 NA)。我想知道年和最近的前一个事件之间的差异是什么。
这是我的例子:
year = seq(5,45, 5)
event = c(NA, 14,NA, NA, 29, NA, NA, NA, NA)
my.df <- data.frame(year,
event)
预期输出:
year event difference
1 5 NA 0 # 0 as not previous data
2 10 14 0 # same
3 15 NA 1 # 1 because 15-14 = 1
4 20 NA 6 # 6 because 20-14 = 6
5 25 29 11 # 11 because 25-14 = 11
6 30 NA 1 # 1 because 30-29 as the closest, not 14 anymore
7 35 NA 6 # etc
8 40 NA 11
9 45 NA 16
有什么方法可以使它自动化吗?事件的发生或多或少是随机的,所以我不能只使用 lag()
这是使用 dplyr
和 tidyr
的可能解决方案
library(dplyr)
library(tidyr)
my.df %>%
mutate(event_filled_lagged = lag(event)) %>%
fill(event_filled_lagged) %>%
mutate(difference = if_else(year > event_filled_lagged, year - event_filled_lagged, NA_real_, missing = 0)) %>%
select(-event_filled_lagged)
输出
# year event difference
# 1 5 NA 0
# 2 10 14 0
# 3 15 NA 1
# 4 20 NA 6
# 5 25 29 11
# 6 30 NA 1
# 7 35 NA 6
# 8 40 NA 11
# 9 45 NA 16
我有两个年份序列,都随着时间的推移而增加。数据以 5 年的时间步长记录。有时,在年份和事件发生之间(如果没有发生则为 NA)。我想知道年和最近的前一个事件之间的差异是什么。
这是我的例子:
year = seq(5,45, 5)
event = c(NA, 14,NA, NA, 29, NA, NA, NA, NA)
my.df <- data.frame(year,
event)
预期输出:
year event difference
1 5 NA 0 # 0 as not previous data
2 10 14 0 # same
3 15 NA 1 # 1 because 15-14 = 1
4 20 NA 6 # 6 because 20-14 = 6
5 25 29 11 # 11 because 25-14 = 11
6 30 NA 1 # 1 because 30-29 as the closest, not 14 anymore
7 35 NA 6 # etc
8 40 NA 11
9 45 NA 16
有什么方法可以使它自动化吗?事件的发生或多或少是随机的,所以我不能只使用 lag()
这是使用 dplyr
和 tidyr
library(dplyr)
library(tidyr)
my.df %>%
mutate(event_filled_lagged = lag(event)) %>%
fill(event_filled_lagged) %>%
mutate(difference = if_else(year > event_filled_lagged, year - event_filled_lagged, NA_real_, missing = 0)) %>%
select(-event_filled_lagged)
输出
# year event difference
# 1 5 NA 0
# 2 10 14 0
# 3 15 NA 1
# 4 20 NA 6
# 5 25 29 11
# 6 30 NA 1
# 7 35 NA 6
# 8 40 NA 11
# 9 45 NA 16