首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >与不是NA的其他行相关的行之间的日差

与不是NA的其他行相关的行之间的日差
EN

Stack Overflow用户
提问于 2017-05-21 08:15:22
回答 2查看 36关注 0票数 0

让我有这样一个数据框架(Df):

代码语言:javascript
复制
Date          x 
20.01.2016    34
21.01.2016    28
22.01.2016    NA
23.01.2016    NA
24.01.2016    56
25.01.2016    NA
26.01.2016    28 

我想在这个数据帧中添加这样一个列(Z)

代码语言:javascript
复制
Date          x      z
20.01.2016    34     - 
21.01.2016    28     1 
22.01.2016    NA     NA     
23.01.2016    NA     NA
24.01.2016    56     3
25.01.2016    NA     NA
26.01.2016    28     2

其中z显示相关行的日期与最近的前一个日期(其中x不是NA)之间的日差。

例如,对于日期24.01.2016,最近的前一个日期是21.01.2016,其中x不是NA。所以这两个日期的日差是3。

我怎么能用R做这件事?

如果有任何帮助,我将非常高兴。非常感谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-05-21 08:33:23

推测您的日期变量是as.Date,(即df$Date <- as.Date(df$Date, format = '%d.%m.%Y')),

代码语言:javascript
复制
df$z[!is.na(df$x)] <- c(NA, diff.difftime(df$Date[!is.na(df$x)]))

df
#        Date  x  z
#1 2016-01-20 34 NA
#2 2016-01-21 28  1
#3 2016-01-22 NA NA
#4 2016-01-23 NA NA
#5 2016-01-24 56  3
#6 2016-01-25 NA NA
#7 2016-01-26 28  2
票数 2
EN

Stack Overflow用户

发布于 2017-05-21 08:40:57

我们可以使用data.table

代码语言:javascript
复制
library(data.table)
setDT(df)[, Date := as.IDate(Date, "%d.%m.%Y")][!is.na(x), z := Date - shift(Date)]

df
#         Date  x  z
#1: 2016-01-20 34 NA
#2: 2016-01-21 28  1
#3: 2016-01-22 NA NA
#4: 2016-01-23 NA NA
#5: 2016-01-24 56  3
#6: 2016-01-25 NA NA
#7: 2016-01-26 28  2
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44094640

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档