我拥有的数据集包含30k +产品,我正在尝试添加新列,以根据subCategory_id
对这些产品进行分类。
我需要4个标签,“Premium”,“Base”,“Other”,“New”。
这就是数据库的样子,只是头部。
product_id product_origin product_price subCategory_id GBP
1 Australia 0.36154597 1 371.31
2 USA 0.14425684 1 148.15
3 USA 0.09020571 1 92.64
5 USA 0.35793051 1 367.59
6 USA 0.19523482 1 200.51
数据集名为random
。我已经尝试了这个,因为类别ID不按顺序排列,但我没有运气。
random %>%
mutate(ifelse(subCategory_id %in% c(1:12, 16, 67:71, 73,74, 78,79, 82, 85:89, 91:104), "Premium",
ifelse(subCategory_id %in% c(19:21, 35, 56,57,61), "Base",
ifelse(subCategory_id %in% c(13:15, 17, 18, 22:28, 30:33),"New"))))
任何帮助都将受到高度赞赏!!!
答案 0 :(得分:2)
我们可以使用键/值列表然后加入
keyVal <- list(Premium= c(1:12, 16, 67:71, 73,74, 78,79, 82, 85:89, 91:104),
Base = c(19:21, 35, 56,57,61),
New = c(13:15, 17, 18, 22:28, 30:33))
library(dplyr)
random %>%
left_join(., stack(keyVal), by = c(subCategory_id = "values"))
答案 1 :(得分:1)
random$productcategory <- ""
random$productcategory[random$subCategory_id %in% c(1:12, 16, 67:71, 73,74, 78,79, 82, 85:89, 91:104)] <- "Premium"
答案 2 :(得分:1)
dplyr
的最新版本有一个名为case_when
的函数。我认为这是解决问题的更好方法:
library(dplyr)
random <- random %>%
mutate(label = case_when(
.$subCategory_id %in% c(1:12, 16, 67:71, 73,74, 78,79, 82, 85:89, 91:104) ~ "Premium",
.$subCategory_id %in% c(19:21, 35, 56,57,61) ~ "Base",
.$subCategory_id %in% c(13:15, 17, 18, 22:28, 30:33) ~ "New"
))
如果使用命令devtools::install_github("hadley/dplyr")
从GitHub安装最新版本,则不必在变量名称前使用.$
。