R 标记列值的更改

问题描述 投票:0回答:1

我有以下包含 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 中的超前和滞后函数来解决这个问题,但它变得有点令人困惑。希望有人能指出我正确的方向

r dplyr data-wrangling
1个回答
0
投票

您可以相当简单地做到这一点:


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
© www.soinside.com 2019 - 2024. All rights reserved.