我有以下包含 2000 万行的数据集。这是按月列出的公司和用户数据。 我创建了first_app_company,它标记了数据集中首次出现的公司。代码如下
df$first_app_company <- as.numeric(!duplicated(df$Company_id))
Company_id Customer Month-Year first_app_company
11 X 201501 1
12 Y 201501 1
13 Z 201501 1
13 Q 201501 0
13 R 201501 0
14 E 201501 1
14 W 201501 0
15 X 201501 1
15 Z 201501 0
15 H 201501 0
15 K 201501 0
16 Q 201501 0
但是,我现在意识到,当一家公司在 M 月输入我的数据集时,我想将与该公司名称和 M 月匹配的所有行标记为 1。所以我想要的输出如下所示: (请注意,201501 是我的数据集中的第一个月,因此所有条目将被标记为 1,但它显示了逻辑)
Company_id Customer Month-Year first_app_company
11 X 201501 1
12 Y 201501 1
13 Z 201501 1
13 Q 201501 1
13 R 201501 1
14 E 201501 1
14 W 201501 1
15 X 201501 1
15 Z 201501 1
15 H 201501 1
15 K 201501 1
16 Q 201501 1
我目前正在尝试使用基础 R 中的超前和滞后函数来解决这个问题,但它变得有点令人困惑。希望有人能指出我正确的方向
您可以相当简单地做到这一点:
library(dplyr)
df <- data.frame(
Company_id = c(11, 12, 13, 13, 13, 14, 14, 15, 15, 15, 15, 16),
Customer = c('X', 'Y', 'Z', 'Q', 'R', 'E', 'W', 'X', 'Z', 'H', 'K', 'Q'),
Month_Year = c('201501', '201501', '201501', '201501', '201501', '201501', '201501', '201501', '201501', '201501', '201501', '201501')
)
df <- df %>%
group_by(Company_id, Month_Year) %>%
mutate(first_app_company = ifelse(row_number() == 1, 1, 1)) %>%
ungroup()
print(df)
这会给你
> print(df)
# A tibble: 12 × 4
Company_id Customer Month_Year first_app_company
<dbl> <chr> <chr> <dbl>
1 11 X 201501 1
2 12 Y 201501 1
3 13 Z 201501 1
4 13 Q 201501 1
5 13 R 201501 1
6 14 E 201501 1
7 14 W 201501 1
8 15 X 201501 1
9 15 Z 201501 1
10 15 H 201501 1
11 15 K 201501 1
12 16 Q 201501 1