创建具有特定值范围的新列

Create new column with a specific range of values

我正在尝试在总展示次数列中创建一个数字范围为 0-40 的新列。

我正在尝试使用 ifelse 函数(如果适用于此)。 这是我目前所拥有的:

group1 <-rocketfuel[rocketfuel$total_impr==<-ifelse(rocketfuel$total_imp<=40, rocketfuel$tot_impr ]

目标是根据展示次数将客户分成 6 组,因此第 1 组将获得 0-40 次展示,第 2 组将获得 41-80 次展示,依此类推。

更新:利用下面给出的解决方案之一,这几乎正是我正在寻找的

rocketfuel$group1 <- ifelse(rocketfuel$tot_impr<=40,1,NA)

得到这个结果

而不是 group1 列吐出 #1,我希望它吐出 #21,这可能吗?

想通了!

library(dplyr)
df %>% 
  mutate(`0-40` = as.logical(ifelse(tot_impr>=0 & tot_impr<=40, TRUE, FALSE)))

输出:

  user_id.s  test converted tot_impr mode_impr_day mode_impr_hour `0-40`
      <int> <int>     <int>    <int>         <int>          <int> <lgl> 
1   1069124     1         0      130             1             20 FALSE 
2   1119715     1         0       93             2             22 FALSE 
3   1144181     1         0       21             2             18 TRUE  
4   1435133     1         0      355             2             10 FALSE 
5   1015700     1         0      276             5             14 FALSE 

数据:

df <- tibble::tribble(
  ~user_id.s, ~test, ~converted, ~tot_impr, ~mode_impr_day, ~mode_impr_hour,
    1069124L,    1L,         0L,      130L,             1L,             20L,
    1119715L,    1L,         0L,       93L,             2L,             22L,
    1144181L,    1L,         0L,       21L,             2L,             18L,
    1435133L,    1L,         0L,      355L,             2L,             10L,
    1015700L,    1L,         0L,      276L,             5L,             14L
  )

您是要对印象少于 40 次的用户的值进行子集化还是要创建一组用户? 此外,请确保您的列名称在调用中保持一致(例如“total_imp”与“total_impr”)。

rocketfuel <- data.frame(user_id=c(1069124,1119715,1144181,1435133,1015700),
    test=rep(1,5),
    converted=rep(0,5), 
    tot_impr=c(130,93,21,355,276),
    mode_impr_day=c(1,2,2,2,5), 
    mode_impr_hour=c(20,22,18,10,14))

如果您要创建一个组,只需将其添加为自己的变量(列)即可。使用 ifelse() 类似于 excel,你可以这样做

rocketfuel$group_lt_40 <- ifelse(rocketfuel$total_impr<=40,1,NA)

如果您尝试创建一个展示次数低于 40 的列,您仍然可以使用 ifelse() 并保持展示次数的原始值尝试:

rocketfuel$group_lt_40_impr <-ifelse(rocketfuel$total_impr<=40,rocketfuel$total_impr,NA)