如何依据第三列取值计算两个timestamp列的时间差,非指定值返回NA
R实现按条件计算时间差的方法
前置准备
首先确保数据框中col1、col2为POSIX时间类型,非时间类型先执行转换:
# 转换时间列格式 df$col1 <- as.POSIXct(df$col1) df$col2 <- as.POSIXct(df$col2)
方法1:R原生语法实现
用ifelse做行级条件判断,搭配difftime计算时间差:
df$diff <- ifelse( df$col3 == 2, as.numeric(difftime(df$col2, df$col1, units = "days")), NA )
说明:
units = "days"指定时间差单位为天,可按需替换为hours/mins/secs调整单位as.numeric用于将difftime生成的时间差对象转换为纯数值,匹配示例输出格式- 若
col1本身为NA,即使col3=2,计算结果也会自动返回NA,符合你给出的预期结果
方法2:dplyr语法实现
如果你习惯用tidyverse生态,可使用mutate+if_else实现,类型安全性更高:
library(dplyr) df <- df %>% mutate( diff = if_else( col3 == 2, as.numeric(difftime(col2, col1, units = "days")), NA_real_ ) )
内容的提问来源于stack exchange,提问作者user13467695
相关产品推荐
相关产品推荐

