R 使用lead()和可能的循环添加新变量
我有一个名为loc_prime2的数据集,如下所示:R 使用lead()和可能的循环添加新变量,r,R,我有一个名为loc_prime2的数据集,如下所示: Document.Name locale Arrival Leg.Number no_legs VCH028735 DENVER_COLORADO 12/2/2018 1 2 VCH028735 _NONE 12/7/2018 2 2 VCH028776 HAR
Document.Name locale Arrival Leg.Number no_legs
VCH028735 DENVER_COLORADO 12/2/2018 1 2
VCH028735 _NONE 12/7/2018 2 2
VCH028776 HARLINGEN_TEXAS 12/2/2018 1 3
VCH028776 LUBBOCK_TEXAS 12/3/2018 2 3
VCH028776 NONE 12/4/2018 3 3
VCH030440 MEMPHIS_TENNESSEE 5/12/2019 1 6
VCH030440 NASHVILLE_TENNESSEE 5/13/2019 2 6
VCH030440 KNOXVILLE_TENNESSEE 5/14/2019 3 6
VCH030440 CHATTANOOGA_TENNESSEE 5/15/2019 4 6
VCH030440 NASHVILLE_TENNESSEE 5/16/2019 5 6
VCH030440 Kennesaw, 5/18/2019 6 6
VCH031580 EUGENE_OREGON 7/8/2019 1 8
VCH031580 NEWPORT_OREGON 7/9/2019 2 8
VCH031580 CORVALLIS_OREGON 7/10/2019 3 8
VCH031580 EUGENE_OREGON 7/11/2019 4 8
VCH031580 EUREKA_CALIFORNIA 7/12/2019 5 8
VCH031580 REDDING_CALIFORNIA 7/15/2019 6 8
VCH031580 SACRAMENTO_CALIFORNIA 7/16/2019 7 8
VCH031580 _NONE 7/17/2019 8 8
我想添加一个新列,其中保存当前到达日期之后的到达日期。这需要进行不同次数的操作,具体取决于行程中的无支腿。例如,第一份文件.Name于12月2日在丹佛;与Document.Name关联的下一个位置为_None,表示丹佛之后没有目的地。因此,VCH028735的管线应压缩为:
Document.Name locale Arrival End
VCH028735 DENVER_COLORADO 12/2/2018 12/7/2018
注意,有些行程有两条腿以上。有多达8条腿的旅行。例如,VCH031580需要压缩为:
Document.Name locale Arrival End
VCH031580 EUGENE_OREGON 7/8/2019 7/9/2019
VCH031580 NEWPORT_OREGON 7/9/2019 7/10/2019
VCH031580 CORVALLIS_OREGON 7/10/2019 7/11/2019
VCH031580 EUGENE_OREGON 7/11/2019 7/12/2019
VCH031580 EUREKA_CALIFORNIA 7/12/2019 7/15/2019
VCH031580 REDDING_CALIFORNIA 7/15/2019 7/16/2019
VCH031580 SACRAMENTO_CALIFORNIA 7/16/2019 7/17/2019
当无支腿为2时,我有这个例子:
test <- as.data.frame(loc_prime2 %>% group_by(Document.Name) %>% mutate(
end1 = as.Date(ifelse(Leg.Number == 1 & no_legs == 2, lead(Arrival), 0),
origin = '1970-01-01')
# end mutate
)
)
test%group\u by(Document.Name)%%>%mutate(
end1=截止日期(如果其他(Leg.Number==1&no_legs==2,lead(Arrival),0),
原点='1970-01-01')
#末端变异
)
)
但要处理不同的no_legs值,我想我需要一个循环或其他东西。我很确定有一个非常简单的方法来做我想做的事——我就是看不见。想法
提前谢谢。我想,考虑到每组的腿数,你会让事情变得更加困难。假设您的到达日期按时间顺序排序,则只需按
Document.Name
分组,然后使用lead
创建新的end
变量。然后,您只需删除最后的所有行(对于end
,这将有一个NA
)
库(dplyr)
loc_prime2%>%
分组人(文件名)%>%
突变(结束=领先(到达))%>%
选择(Document.Name、locale、Arrival、End、Leg.Number)%>%
过滤器(!is.na(结束))
#>#A tibble:15 x 5
#>#组:Document.Name[4]
#>文档.名称区域设置到达结束段.编号
#>
#>1 VCH028735科罗拉多州丹佛12/2/2018 12/7/2018 1
#>2 VCH028776德克萨斯州哈林根大学2018年12月2日2018年12月3日1
#>3 VCH028776德克萨斯州卢博克大学2018年3月12日2018年4月12日2
#>4 VCH030440田纳西州孟菲斯5/12/2019 5/13/2019 1
#>5 VCH030440田纳西州纳什维尔5/13/2019 5/14/2019 2
#>6 VCH030440田纳西州诺克斯维尔2019年5月14日2019年5月15日3
#>7 VCH030440田纳西州查塔努加5/15/2019 5/16 4
#>8 VCH030440田纳西州纳什维尔5/16/2019 5/18/2019 5
#>9 VCH031580俄勒冈州尤金尤金2019年7月8日2019年7月9日1
#>10 VCH031580俄勒冈州新港2019年7月9日2019年7月10日2
#>11 VCH031580俄勒冈州科瓦利斯7/10/2019 7/11/2019 3
#>12 VCH031580俄勒冈州尤金尤金2019年11月7日2019年12月7日4
#>13 VCH031580加利福尼亚州尤里卡7/12/2019 7/15/2019 5
#>14 VCH031580加利福尼亚州雷丁大学2019年7月15日2019年7月16日6
#>15 VCH031580加利福尼亚州萨克拉门托7/16/2019 7/17 7
不知道R会自己处理不同数量的支腿。艾伦,我想告诉你我在这个问题上工作了多久,但我太尴尬了。谢谢你的帮助。
library(dplyr)
loc_prime2 %>%
group_by(Document.Name) %>%
mutate(End = lead(Arrival)) %>%
select(Document.Name, locale, Arrival, End, Leg.Number) %>%
filter(!is.na(End))
#> # A tibble: 15 x 5
#> # Groups: Document.Name [4]
#> Document.Name locale Arrival End Leg.Number
#> <chr> <chr> <chr> <chr> <int>
#> 1 VCH028735 DENVER_COLORADO 12/2/2018 12/7/2018 1
#> 2 VCH028776 HARLINGEN_TEXAS 12/2/2018 12/3/2018 1
#> 3 VCH028776 LUBBOCK_TEXAS 12/3/2018 12/4/2018 2
#> 4 VCH030440 MEMPHIS_TENNESSEE 5/12/2019 5/13/2019 1
#> 5 VCH030440 NASHVILLE_TENNESSEE 5/13/2019 5/14/2019 2
#> 6 VCH030440 KNOXVILLE_TENNESSEE 5/14/2019 5/15/2019 3
#> 7 VCH030440 CHATTANOOGA_TENNESSEE 5/15/2019 5/16/2019 4
#> 8 VCH030440 NASHVILLE_TENNESSEE 5/16/2019 5/18/2019 5
#> 9 VCH031580 EUGENE_OREGON 7/8/2019 7/9/2019 1
#> 10 VCH031580 NEWPORT_OREGON 7/9/2019 7/10/2019 2
#> 11 VCH031580 CORVALLIS_OREGON 7/10/2019 7/11/2019 3
#> 12 VCH031580 EUGENE_OREGON 7/11/2019 7/12/2019 4
#> 13 VCH031580 EUREKA_CALIFORNIA 7/12/2019 7/15/2019 5
#> 14 VCH031580 REDDING_CALIFORNIA 7/15/2019 7/16/2019 6
#> 15 VCH031580 SACRAMENTO_CALIFORNIA 7/16/2019 7/17/2019 7