R用组内另一个列值的下一个值替换NA值

标签 r data.table dplyr

我有一个数据框如下

tmpdf <- data.frame(spaceNum=c(1,1,1,2,2,2,2), time.IN=c("2015-09-04 16:30", "2015-09-04 19:50", "2015-09-04 21:00", "2015-09-05 12:00", "2015 09-05 13:00", "2015 09-05 16:00", "2015 09-05 17:00"), time.OUT= c("2015-09-04 18:00", "NA", "NA","NA", "2015-09-05 13:21", "2015 09-05 16:48", "NA"))

> tmpdf
  spaceNum          time.IN         time.OUT
1        1 2015-09-04 16:30 2015-09-04 18:00
2        1 2015-09-04 19:50               NA
3        1 2015-09-04 21:00               NA
4        2 2015-09-05 12:00               NA
5        2 2015 09-05 13:00 2015-09-05 13:21
6        2 2015 09-05 16:00 2015 09-05 16:48
7        2 2015 09-05 17:00               NA
> 

我想将 time.OUT 的 NA 值替换为 time.IN 的下一行值,它不是 NULL 并且在同一 spaceNum组。即,以下是我的预期结果。

 spaceNum          time.IN         time.OUT
    1        1 2015-09-04 16:30 2015-09-04 18:00
    2        1 2015-09-04 19:50 2015-09-04 21:00
    3        1 2015-09-04 21:00               NA
    4        2 2015-09-05 12:00 2015-09-05 13:00
    5        2 2015 09-05 13:00 2015-09-05 13:21
    6        2 2015 09-05 16:00 2015 09-05 16:48
    7        2 2015 09-05 17:00               NA

似乎 dplyr 或 data.table 可以做到这一点,我已经搜索了以前的问题,但还没有找到正确的方法。

这对于 R 专家用户来说可能是简单的问题,但对我来说,它已经让我兴奋了几个小时,但没有找到好的解决方案。请帮我!!谢谢。

最佳答案

这是一个可能的 dplyr 解决方案。这是 ifelselead 的组合,而最终产品应该再次转换为 as.POSIXct 由于丢失信息ifelse

的使用
library(dplyr)
tmpdf %>%
  group_by(spaceNum) %>%
  mutate(time.OUT = as.POSIXct(ifelse(is.na(time.OUT), lead(time.IN), time.OUT), origin = "1970-01-01"))
# Source: local data frame [7 x 3]
# Groups: spaceNum
# 
#   spaceNum             time.IN            time.OUT
# 1        1 2015-09-04 16:30:00 2015-09-04 18:00:00
# 2        1 2015-09-04 19:50:00 2015-09-04 21:00:00
# 3        1 2015-09-04 21:00:00                <NA>
# 4        2 2015-09-05 12:00:00 2015-09-05 13:00:00
# 5        2 2015-09-05 13:00:00 2015-09-05 13:21:00
# 6        2 2015-09-05 16:00:00 2015-09-05 16:48:00
# 7        2 2015-09-05 17:00:00                <NA>

关于R用组内另一个列值的下一个值替换NA值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32437910/

相关文章:

R data.table 替换多列中的值

r - 使用 dplyr 根据日期变量过滤行

r - 根据条件在 ggplot 中分配标签颜色会返回意外(和不正确)的结果

r - 如何从R中的嵌套列表中提取元素

r - R中列表中相交向量的并集

r - 什么是R赋值运算符:= for?

r - 如何在组内创建字母序列?

r - 如何将 R 数据集中的多列合并为一列?

r - 通过安全的 smtp 服务器发送带有囊胚的邮件失败 (r)

r - 从嵌套列表深处提取命名元素的通用方法