Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在列上迭代忽略但保留R中的NA值_R_Iteration - Fatal编程技术网

在列上迭代忽略但保留R中的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

我在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)
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"))