You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在R中为餐食销售数据添加海鲜可用度得分列的方法

计算每日海鲜可用度得分的简便方法

要统计每行中指定海鲜相关列的非零值数量并生成新列,以下是两种高效实现方式:

1. Base R 实现

无需额外安装包,直接用基础函数完成:

# 加载示例数据
mussel <- structure(list(X = c(2L, 4L, 6L, 8L, 10L, 12L), Date = structure(c(18322, 18567, 18597, 18323, 18568, 18598), class = "Date"), Day = c("Tue", "Mon", "Wed", "Wed", "Tue", "Thu"), WeekofFullTerm = c(7L, 5L, 9L, 7L, 5L, 9L), MenuRotation = c(1L, 1L, 1L, 1L, 1L, 1L), Term = c("Spring", "Autumn", "Autumn", "Spring", "Autumn", "Autumn"), Period = c("Term", "Term", "Term", "Term", "Term", "Term"), Condition = c("Baseline", "Baseline", "Baseline", "Just Mussels", "Baseline", "Baseline"), Meal = c("Lunch", "Lunch", "Lunch", "Lunch", "Lunch", "Lunch"), MainMealsSold = c(151L, 152L, 182L, 156L, 171L, 117L), Fish = c(8L, 58L, 8L, 13L, 5L, 53L), Fish.or.Vegan = c(0L, 0L, 0L, 0L, 0L, 0L), Fish.or.Veggie = c(0L, 0L, 0L, 0L, 0L, 0L), Just.Mussels = c(0L, 0L, 0L, 20L, 0L, 0L), Meat = c(10L, 9L, 91L, 82L, 28L, 10L), Meat.or.Vegan = c(0L, 43L, 0L, 0L, 0L, 0L), Meat.or.Veggie = c(52L, 0L, 0L, 0L, 71L, 0L), Mussels.Combined = c(0L, 0L, 0L, 1L, 0L, 0L), Unknown = c(39L, 0L, 0L, 0L, 0L, 0L), Vegan = c(40L,  6L, 5L, 3L, 66L, 9L), Vegan.or.Veggie = c(0L, 0L, 69L, 37L, 0L, 42L), Veggie = c(2L, 36L, 9L, 0L, 1L, 3L), VegVeganPercent = c(27.8145695364238, 27.6315789473684, 45.6043956043956, 25.6410256410256, 39.1812865497076, 46.1538461538462),MeatPercent = c(6.62251655629139, 5.92105263157895, 50, 52.5641025641026, 16.374269005848, 8.54700854700855), FishPercent = c(5.29801324503311, 38.1578947368421, 4.3956043956044, 8.33333333333333, 2.92397660818713, 45.2991452991453), UnknownPercent = c(60.2649006622517, 28.2894736842105, 0, 0, 41.5204678362573, 0), MusselPercent = c(0, 0, 0, 13.4615384615385, 0, 0), MusselJustPercent = c(0, 0, 0, 12.8205128205128, 0, 0), MusselCombinedPercent = c(0, 0, 0, 0.641025641025641, 0, 0), SeafoodTotal = c(8L, 58L, 8L, 34L, 5L, 53L), NonSeafoodTotal = c(91L, 51L, 174L, 122L, 95L, 64L), SeafoodPercent = c(5.29801324503311, 38.1578947368421, 4.3956043956044, 21.7948717948718, 2.92397660818713, 45.2991452991453), NonSeafoodPercent = c(60.2649006622517, 33.5526315789474, 95.6043956043956, 78.2051282051282, 55.5555555555556, 54.7008547008547), MusselTotal = c(0L, 0L, 0L, 21L, 0L, 0L), NonMusselTotal = c(99L, 109L, 182L, 135L, 100L, 117L), VegVeganTotal = c(42L, 42L, 83L, 40L, 67L, 54L), NonVegVeganTotal = c(57L, 67L, 99L, 116L, 33L, 63L), MeatTotal = c(10L, 9L, 91L, 82L, 28L, 10L), NonMeatTotal = c(89L, 100L, 91L, 74L, 72L, 107L), FishTotal = c(8L, 58L, 8L, 13L, 5L, 53L), NonFishTotal = c(91L, 51L, 174L, 143L, 95L, 64L), Test100 = c(100, 100, 100, 100, 100, 100)), row.names = c(2L, 4L, 6L, 8L, 10L, 12L), class = "data.frame")

# 定义需要统计的海鲜相关列
seafood_cols <- c('Fish', 'Fish.or.Vegan', 'Fish.or.Veggie', 'Just.Mussels', 'Mussels.Combined')

# 计算每行非零值数量,新增为SeafoodAvailabilityScore列
mussel$SeafoodAvailabilityScore <- apply(mussel[seafood_cols], 1, function(x) sum(x != 0))

2. dplyr 实现(适合tidyverse工作流)

如果使用tidyverse工具集,用rowSums结合across的方式效率更高:

library(dplyr)

# 同样定义目标列
seafood_cols <- c('Fish', 'Fish.or.Vegan', 'Fish.or.Veggie', 'Just.Mussels', 'Mussels.Combined')

# 生成新列
mussel <- mussel %>%
  mutate(SeafoodAvailabilityScore = rowSums(across(all_of(seafood_cols)) != 0))

验证结果

执行完代码后,可以查看新增列与原列的对应关系:

mussel %>% select(Date, SeafoodAvailabilityScore, all_of(seafood_cols))

输出结果示例:

DateSeafoodAvailabilityScoreFishFish.or.VeganFish.or.VeggieJust.MusselsMussels.Combined
2020-03-03180000
2020-11-231580000
2020-12-23180000
2020-03-0431300201
2020-11-24150000
2020-12-241530000

内容的提问来源于stack exchange,提问作者dwiller

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 20:42:30