如何在R中创建计算真实销量的新列actual_quantity?
解决方案
需求核心是从Line.item.name列提取开头的数字,与Quantity列相乘得到真实销量actual_quantity,以下是两种可行实现方式:
方法1:Base R原生实现
无需额外安装工具包,直接用正则表达式提取数字并计算:
# 加载你的数据集 df <- structure(list(Line.item.name = c("2 Vegan PDN", "1 Vegan PDN", "4 Vegan PDN", "6 Vegan PDN"), Quantity = c(123L, 208L, 8L, 2L )), row.names = c(NA, -4L), class = "data.frame") # 新增actual_quantity列 df$actual_quantity <- as.numeric(sub("^(\\d+).*", "\\1", df$Line.item.name)) * df$Quantity # 查看最终结果 print(df)
- 正则表达式
^(\\d+).*匹配字符串开头的连续数字,sub函数提取这部分内容; - 转成数值型后与
Quantity相乘,得到真实销量。
方法2:Tidyverse工具包实现
用dplyr(数据处理)和stringr(字符串处理)组合,代码可读性更强:
# 首次使用需先安装工具包:install.packages(c("dplyr", "stringr")) library(dplyr) library(stringr) # 加载你的数据集 df <- structure(list(Line.item.name = c("2 Vegan PDN", "1 Vegan PDN", "4 Vegan PDN", "6 Vegan PDN"), Quantity = c(123L, 208L, 8L, 2L )), row.names = c(NA, -4L), class = "data.frame") # 计算并新增真实销量列 df <- df %>% mutate( item_per_sale = as.numeric(str_extract(Line.item.name, "^\\d+")), actual_quantity = item_per_sale * Quantity ) %>% select(-item_per_sale) # 可选:移除中间生成的辅助列 # 查看最终结果 print(df)
str_extract(Line.item.name, "^\\d+")专门提取开头数字,逻辑更直观;- 用
mutate新增列,select按需移除辅助列,保持数据整洁。
最终结果
| Line.item.name | Quantity | actual_quantity |
|---|---|---|
| 2 Vegan PDN | 123 | 246 |
| 1 Vegan PDN | 208 | 208 |
| 4 Vegan PDN | 8 | 32 |
| 6 Vegan PDN | 2 | 12 |
内容的提问来源于stack exchange,提问作者highfocus
相关产品推荐
相关产品推荐

