尝试使用dplyr仅滞后某些变量

尝试使用dplyr仅滞后某些变量,r,R,我试图保留原始数据,但只计算文本某些行的延迟。Iv'e尝试过过滤,但它漏掉了数据。此外,滞后似乎并不真正考虑DT…< / P> 你觉得怎么样 library (tidyverse) df2<- nycflights13::weather df2 <- df2 %>% mutate (dt= as.Date(time_hour)) %>% add_count(origin,dt) df2 <- df2 %>% mutate(lag_ewr1=lag(n,1))

我试图保留原始数据,但只计算文本某些行的延迟。Iv'e尝试过过滤,但它漏掉了数据。此外,滞后似乎并不真正考虑DT…< / P> 你觉得怎么样

library (tidyverse)
df2<- nycflights13::weather
df2 <- df2 %>% mutate (dt= as.Date(time_hour)) %>% add_count(origin,dt)
df2 <- df2 %>% mutate(lag_ewr1=lag(n,1))
库(tidyverse)
df2%加法计数(原点,dt)
df2%突变(滞后时间=滞后时间(n,1))

您可以对每个
dt
执行
lag
,并将
lag\u ewr1
更改为
NA
,除了
“EWR”

如果我们想在日期值之间滞后,我们可以使用:

df2 %>% 
  arrange(dt, origin) %>%
  group_by(dt) %>% 
  summarise(lag_ewr1 = first(n)) %>%
  mutate(lag_ewr1 = lag(lag_ewr1)) %>%
  left_join(df2, by = 'dt') %>%
  mutate(lag_ewr1 = replace(lag_ewr1, origin != 'EWR', NA))

您可以对每个
dt
执行
lag
,并将
lag\u ewr1
更改为
NA
,除了
“EWR”

如果我们想在日期值之间滞后,我们可以使用:

df2 %>% 
  arrange(dt, origin) %>%
  group_by(dt) %>% 
  summarise(lag_ewr1 = first(n)) %>%
  mutate(lag_ewr1 = lag(lag_ewr1)) %>%
  left_join(df2, by = 'dt') %>%
  mutate(lag_ewr1 = replace(lag_ewr1, origin != 'EWR', NA))


lag还有一个名为“order_by”的附加参数,您可以使用它来确保其按正确的变量排序。从你的问题来看,我不清楚哪些行需要滞后,哪些行不需要滞后。是否要为每个日期创建滞后列<代码>df2%>%group\U by(dt)%>%mutate(lag\U ewr1=lag(n,1))?谢谢。我想按dt分组,但只得到EWR机场的延迟,其他机场应为空白。类似这样,但保留所有行
df2%group\u by(dt)%%>%filter(origin==“EWR”)%%>%mutate(lag\u ewr1=lag(n,1))
@RonakShah请注意,在您的解决方案中,滞后并不准确,它只指每个dt中的第一行,例如2013年1月1日除第一行get 17外的所有行,当它们应该是“EWR”您的原始帖子中未提及机场状况,因此我们无法知道您只想
滞后于该机场。但是,这应该在我下面的答案中处理。lag有一个额外的参数,称为“order_by”,您可以使用它来确保其按正确的变量排序。从你的问题来看,我不清楚哪些行需要滞后,哪些行不需要滞后。是否要为每个日期创建滞后列<代码>df2%>%group\U by(dt)%>%mutate(lag\U ewr1=lag(n,1))
?谢谢。我想按dt分组,但只得到EWR机场的延迟,其他机场应为空白。类似这样,但保留所有行
df2%group\u by(dt)%%>%filter(origin==“EWR”)%%>%mutate(lag\u ewr1=lag(n,1))
@RonakShah请注意,在您的解决方案中,滞后并不准确,它只指每个dt中的第一行,例如2013年1月1日除第一行get 17外的所有行,当它们应该是“EWR”您的原始帖子中未提及机场状况,因此我们无法知道您只想
滞后于该机场。不过,这应该在我下面的回答中处理。像往常一样谢谢!关于此解决方案的快速问题。我们可以看到,对于所有这些行,2013年1月1日的滞后ewr1应为NA,对于2013年1月2日的所有行,滞后ewr1应为17。看一眼就知道不是那样的<代码>df3%过滤器(origin==“EWR”)df3%dplyr::select(dt,lag_ewr1)df3%>%过滤器(dt==“2013-01-01”| dt==“2013-01-02”)
原来的解决方案并不是这样做的。
滞后
发生在相同的
dt
中。我想更新后的答案就是你想要的。只是一个小问题,这个解决方案如何用于lag2、lag3等。。我们可以用什么来代替第一个函数?在这种情况下,选择哪个值并不重要,因为所有值都是相同的。我选择了第一个,你可以选择第二个,第三个。如果您想要
lag2
您需要将
lag
行更改为
mutate(lag\u ewr1=lag(lag\u ewr1,2))
一如既往地感谢您!关于此解决方案的快速问题。我们可以看到,对于所有这些行,2013年1月1日的滞后ewr1应为NA,对于2013年1月2日的所有行,滞后ewr1应为17。看一眼就知道不是那样的<代码>df3%过滤器(origin==“EWR”)df3%dplyr::select(dt,lag_ewr1)df3%>%过滤器(dt==“2013-01-01”| dt==“2013-01-02”)原来的解决方案并不是这样做的。
滞后
发生在相同的
dt
中。我想更新后的答案就是你想要的。只是一个小问题,这个解决方案如何用于lag2、lag3等。。我们可以用什么来代替第一个函数?在这种情况下,选择哪个值并不重要,因为所有值都是相同的。我选择了第一个,你可以选择第二个,第三个。如果您想要
lag2
您需要将
lag
行更改为
mutate(lag\u ewr1=lag(lag\u ewr1,2))