我正在尝试根据“ExpectedDate”和“ObservedDate”填充“FinalDate”。
规则是:对于每个组,如果观察日期大于前一个预期日期且小于下一个预期日期,则最终日期等于观察日期,否则最终日期等于预期日期。
如何修改下面的代码以确保:
set.seed(2)
dat<-data.frame(Group=sample(LETTERS[1:10], 100, replace=TRUE),
Date=sample(seq(as.Date('2013/01/01'), as.Date('2020/01/01'), by="day"), 100))%>%
mutate(ExpectedDate=Date+sample(10:200, 100, replace=TRUE),
ObservedDate=Date+sample(10:200, 100, replace=TRUE))%>%
group_by(Group)%>%
arrange(Date)%>%
mutate(n=row_number())%>%arrange(Group)%>%ungroup()%>%
as.data.frame()
#generate some missing values in "ObservedDate"
dat[sample(nrow(dat),20), "ObservedDate"]<-NA
dat$FinalDate<-NA
for (i in 1:nrow(dat)){
dat[i, "FinalDate"]<-if_else(!is.na(dat$"ObservedDate")[i] &&
dat[i, "ObservedDate"] > dat[i-1, "ExpectedDate"] &&
dat[i, "ObservedDate"] < dat[i+1, "ExpectedDate"],
dat[i, "ObservedDate"],
dat[i,"ExpectedDate"])
}
dat$FinalDate<-as.Date(dat$FinalDate) # convert numeric to Date format
例如,在下面的输出中:
当i=90时,代码在字母I中查找之前的预期日期
我们希望它只在字母J中查找ExpectedDate。如果组没有上一个预期日期,并且ObservedDate大于ExpectedDate但小于下一个expected日期,则FinalDate应填写ExpectedData。
在 i=100 时,代码生成 NA,因为没有下一个观测值可用
我们希望填写此值,以便对于每个组中的最后一个观察,如果观察日期大于组中的最后一个预期日期,则 FinalDate=ObservedDate,否则为预期日期。
Group Date ExpectedDate ObservedDate n FinalDate
88 I 2015-09-07 2015-12-05 <NA> 7 2015-12-05
89 I 2018-08-02 2018-11-01 2018-08-13 8 2018-11-01
90 J 2013-07-24 2013-08-30 2013-08-12 1 2013-08-30
91 J 2013-11-22 2014-01-02 2014-04-05 2 2014-04-05
92 J 2014-11-03 2015-03-23 2015-05-10 3 2015-05-10
93 J 2015-08-30 2015-12-09 2016-02-04 4 2016-02-04
94 J 2016-04-18 2016-09-03 <NA> 5 2016-09-03
95 J 2016-10-10 2017-01-29 2017-04-14 6 2017-04-14
96 J 2017-02-14 2017-07-05 <NA> 7 2017-07-05
97 J 2017-04-21 2017-10-01 2017-08-26 8 2017-08-26
98 J 2017-10-01 2018-01-27 2018-02-28 9 2018-02-28
99 J 2018-08-03 2019-01-31 2018-10-20 10 2018-10-20
100 J 2019-04-25 2019-06-23 2019-08-16 11 <NA>
我们可以放开< code>for循环,在< code>dplyr中使用< code>group_by 、< code>lag和< code>lead:
library(dplyr)
dat %>%
group_by(Group) %>%
mutate(FinalDate = if_else(ObservedDate > lag(ExpectedDate) &
ObservedDate < lead(ExpectedDate), ObservedDate, ExpectedDate))
我们也可以做这个数据.table::between
dat %>%
group_by(Group) %>%
mutate(FinalDate = if_else(data.table::between(ObservedDate,
lag(ExpectedDate), lead(ExpectedDate)), ObservedDate, ExpectedDate))
我正在尝试使用For循环将一个随机整数(0-2)添加到一个变量中指定的次数。我遇到的问题是,循环不是每次循环时都使用一个新的随机数,所以,如果我输入9,我只能得到0、9,或者18。 我希望一个对象返回的键“a”和“b”具有不同的数值。
我是不是误解了什么?据我所知,Julia中的Dataframes与R中的Dataframes的工作方式不同,但我无法全神贯注于如何使其工作。
在Django模板中,我想创建一个遍历列表的for循环。在循环过程中,我还希望能够使用循环的迭代次数。 例如,如果有4个元素,那么: 应打印以下内容: 我该怎么做呢?
问题内容: 我在显示日期的django模板中有以下for循环。我想知道是否有可能在循环中迭代一个数字(在以下情况下为i)。还是我必须将其存储在数据库中,然后以days.day_number的形式查询? 问题答案: Django提供了它。你可以使用以下任一方法: 索引从1开始。 索引从0开始。 在模板中,你可以执行以下操作:
在django模板中,我有以下for循环显示天数。我想知道是否有可能在循环中迭代一个数字(在下面的例子I中)。或者我必须将其存储在数据库中,然后以天的形式进行查询。第几天?
本文向大家介绍为什么在JavaScript数组迭代中使用“ for…in”循环是个坏主意?,包括了为什么在JavaScript数组迭代中使用“ for…in”循环是个坏主意?的使用技巧和注意事项,需要的朋友参考一下 在大多数情况下,通常最好使用' for '循环而不是“ for ... in ”循环,因为“ for ... in ”循环会产生索引 ,而不会打扰剩余的索引普通的“ for ”循环显示