在列上迭代忽略但保留R中的NA值
我在R中有一个时间序列数据帧,它有一个列V1,它由整数组成,中间散布着一些NAs。我想迭代这个列,并在前面的一个时间步中减去V1。但是,我想忽略V1中的NA值,并在减法中使用最后一个非NA值。如果V1的当前值为NA,则差值应返回NA。请参见下面的示例在列上迭代忽略但保留R中的NA值,r,iteration,R,Iteration,我在R中有一个时间序列数据帧,它有一个列V1,它由整数组成,中间散布着一些NAs。我想迭代这个列,并在前面的一个时间步中减去V1。但是,我想忽略V1中的NA值,并在减法中使用最后一个非NA值。如果V1的当前值为NA,则差值应返回NA。请参见下面的示例 V1 <- c(1, 3, 4, NA, NA, 6, 9, NA, 10) time <- 1:length(V1) dat <- data.frame(time = time, V1
V1 <- c(1, 3, 4, NA, NA, 6, 9, NA, 10)
time <- 1:length(V1)
dat <- data.frame(time = time,
V1 = V1)
lag_diff <- c(NA, 2, 1, NA, NA, 2, 3, NA, 1) # The result I want
diff(dat$V1) # Not the result I want
V1tidyverse版本,以防万一。但它确实需要一个过滤器
dat %>%
filter(!is.na(V1)) %>%
mutate(diff=V1- lag(V1)) %>%
right_join(dat,by=c("time","V1"))
一个整洁的版本,以防万一。但它确实需要一个过滤器
dat %>%
filter(!is.na(V1)) %>%
mutate(diff=V1- lag(V1)) %>%
right_join(dat,by=c("time","V1"))
哇!我真不敢相信事情会这么简单。我当然不需要任何tidyverse函数,因为您可以使用base index.Wow来实现它。我真不敢相信事情会这么简单。我当然不需要任何tidyverse函数,因为您可以使用基本索引实现它。
dat %>%
filter(!is.na(V1)) %>%
mutate(diff=V1- lag(V1)) %>%
right_join(dat,by=c("time","V1"))