问题描述
+----------+------+
| ID | year |
+----------+------+
| 1 | 2002 |
| 1 | 2003 |
| 1 | 2004 |
| 2 | 2015 |
| 2 | 2016 |
| 2 | 2017 |
| 2 | 2018 |
| 3 | 2004 |
| 3 | 2005 |
+----------+------+
我想添加一个标记ID中第一次(或最早)出现的变量以获取以下信息:
+----------+------+------+
| ID | year | flag |
+----------+------+------+
| 1 | 2002 | 1 |
| 1 | 2003 | 0 |
| 1 | 2004 | 0 |
| 2 | 2015 | 1 |
| 2 | 2016 | 0 |
| 2 | 2017 | 0 |
| 2 | 2018 | 0 |
| 3 | 2004 | 1 |
| 3 | 2005 | 0 |
+----------+------+------+
解决方法
使用dplyr
,我们可以按'ID'分组,并基于'year'的min
值创建逻辑向量,并用+
强制将其转换为二进制
df1 %>%
group_by(ID) %>%
mutate(flag = +(year == min(year))
如果数据已经order
编辑
df1 %>%
mutate(flag = !duplicated(ID))
或者如果“年份”已经order
编辑
df1$flag <- !duplicated(df1$ID)
,
使用ave
transform(
df,flag = ave(1:nrow(df),ID,FUN = function(x) seq_along(x)==1)
)