【发布时间】:2022-11-22 04:32:35
【问题描述】:
假设我有一个以下格式的示例数据框:
df <- data.frame( c(1,2,3,1,2,3,1,2,3),
c(3,3,3,2,2,2,1,1,1),
c(23,23,34,134,134,NA,45,NA,NA)
)
colnames(df) <- c("id", "year", "fte_wage")
df <- df[is.na(df$fte_wage) == FALSE,]
我想创建一个二进制变量(比方说,一个名为“obs”的列)是否在之前观察到个人。我尝试了以下方法:
library(dplyr)
df2 <-
df %>%
arrange(id, year) %>%
group_by(id) %>%
rowwise() %>%
mutate(obs = ifelse((lag(year) %in% df[df$id == id,]$year & year > lag(year)), 1, 0))
它生成一列只有 0 个值。如果我删除第二个条件,代码可以工作,但它会误解 lag(year) 命令,因为它也从不同的个人那里获取值。
我想要的输出将是以下格式的数据框:
| id | year | fte_wage | ob |
|---|---|---|---|
| 1 | 1 | 23 | 0 |
| 1 | 2 | 23 | 1 |
| 1 | 3 | 43 | 1 |
| 2 | 1 | 54 | 0 |
| 2 | 2 | 32 | 1 |
| 3 | 1 | 56 | 0 |
【问题讨论】:
-
你能清楚地解释你想做什么吗?
-
是 - 期望的输出是什么?另外
rowwise()也是一个分组函数,所以它会覆盖上一行的分组,并将每一行单独分组,所以它只会返回NA和lag()函数。