【发布时间】:2020-12-02 16:10:31
【问题描述】:
我认为应该是一项非常简单的数据转换任务,但我遇到了一些问题。 我有一个看起来像这样的数据框:
df
council_name year treat
1 Southwark 2008 1
2 Southwark 2009 0
3 Southwark 2010 1
4 Lambeth 2006 0
5 Lambeth 2007 1
6 Lambeth 2008 0
7 Yorkshire 2006 0
8 Yorkshire 2007 0
9 Yorkshire 2008 0
我正在尝试获取一个新变量,例如 pre.post,如果理事会已经拥有值 1,则为 year、1 的任何较低值 treat。基本上我想要pre.post == 1 如果council 之前有过year treat == 1。
这就是我要找的:
df.desired
council_name year treat pre.post
1 Southwark 2008 1 1
2 Southwark 2009 0 1
3 Southwark 2010 1 1
4 Lambeth 2006 0 0
5 Lambeth 2007 1 1
6 Lambeth 2008 0 1
7 Yorkshire 2006 0 0
8 Yorkshire 2007 0 0
9 Yorkshire 2008 0 0
基本上所有在任何以前时间处理 == 1 的理事会都得到 pre.post == 1。 我尝试了不同的方法,例如:
library(dplyr)
df%>%
group_by(council_name)%>%
arrange(year)%>%
mutate(pre.post = ifelse(any(lag(year) = 1), 1, 0))
但似乎没有什么能完全满足我的要求。 谢谢!
【问题讨论】:
标签: r dataframe tidyverse dplyr