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

R语言基于MY_CARS_SALES数据集指定列规则计算行总得分问题

R代码问题排查与修改方案

原代码错误点

  • PRICE列判断逻辑完全错误:原代码写为x == '6:10',该语句作用是判断值是否等于字符串"6:10",既不符合「取值介于6到16之间」的规则,也写错了范围阈值。
  • SMOKE列判断不规范:SMOKE是数值型列,无需和字符串'0'比较,直接和数值0判断即可,避免R隐式转换带来的潜在问题。

修改后的正确代码

MY_CARS_SALES$NEWSCORE <- rowSums(cbind(
  # 规则1:VOLVO、VW小于对应列中位数得1分
  sapply(MY_CARS_SALES[c("VOLVO" , "VW")], function(x){ifelse(x < median(x), 1, 0)}),
  # 规则2:NISSAN、ROVER大于对应列中位数得1分
  sapply(MY_CARS_SALES[c("NISSAN", "ROVER")], function(x){ifelse(x > median(x), 1, 0)}),
  # 规则3:SMOKE等于0得1分
  sapply(MY_CARS_SALES["SMOKE"], function(x) {ifelse(x == 0, 1, 0)}),
  # 规则4:PRICE介于6到16之间得1分
  sapply(MY_CARS_SALES["PRICE"], function(x) {ifelse(x >=6 & x <=16, 1, 0)}),
  # 规则5:ANTIQUE等于YES得1分
  sapply(MY_CARS_SALES["ANTIQUE"], function(x) {ifelse(x == 'YES', 1, 0)})
))

简化写法(可选)

逻辑判断本身会返回TRUE/FALSE,直接转数值就是1/0,可以去掉ifelse简化代码:

MY_CARS_SALES$NEWSCORE <- rowSums(cbind(
  sapply(MY_CARS_SALES[c("VOLVO" , "VW")], function(x) as.integer(x < median(x))),
  sapply(MY_CARS_SALES[c("NISSAN", "ROVER")], function(x) as.integer(x > median(x))),
  as.integer(MY_CARS_SALES$SMOKE == 0),
  as.integer(MY_CARS_SALES$PRICE >=6 & MY_CARS_SALES$PRICE <=16),
  as.integer(MY_CARS_SALES$ANTIQUE == "YES")
))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 19:06:03