创建具有特定值范围的新列
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)
我正在尝试在总展示次数列中创建一个数字范围为 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)