首页 > 解决方案 > R:如何简单地计算最后一个 NA

问题描述

我想知道一种简单的方法,使用 dplyr 来计算每个 Id 的最后一个 NA 值的数量(仅当最后一个值为 NA 时)

 my_data <- tibble(Id =c(1,1,1,2,2,2),date = rep(seq.Date(ymd(20210101),ymd(20210103),by =1 ),2), value = c(5, NA, 4, 4, NA, NA))

预期结果:

 result <- tibble(Id = c(1,2), Result = c(0, 2))

我试过了

 my_data %>% 
     group_by(Id) %>% 
     mutate(test= ifelse(is.na(value), 1, 0)) %>% 
     filter(rle(test)$values[length(rle(test)$lengths)]!=0 ) %>% 
     summarise(result = rle(test)$lengths[length(rle(test)$lengths)])

标签: rdplyr

解决方案


更新: 非常感谢帮助我理解问题的@tmfmnk,也非常感谢再次帮助我解决任务的@akrun!使用 dplyr 仅计算序列第一次出现的次数

library(dplyr)
my_data %>% 
  group_by(Id) %>% 
  mutate(value = rev(value)) %>% 
  mutate(first_sequence_A = with(rle(is.na(value)), lengths[values][1])) %>% 
  summarise(lastNAcount = ifelse(is.na(first(value)), first_sequence_A[1],0))

输出:

     Id lastNAcount
  <dbl>       <dbl>
1     1           0
2     2           2

第一个答案: 试试这个:

library(dplyr)
my_data %>% 
  group_by(Id) %>% 
  summarise(lastNAcount = sum(is.na(last(value))))
     Id lastNAcount
* <dbl>       <int>
1     1           0
2     2           1

推荐阅读