首页 > 解决方案 > 根据列中的值分配分数

问题描述

MY_CARS_SALES <- data.frame(
  AGE = c(2, 6, 3, 7, 4, 5),
  ANTIQUE= c("YES", "NO", "NO", "NO", "YES", "NO"),
  SMOKE= c(2,0,1,3,0,1), 
  PRICE = c(45, 40, 6, 22, 16, 10), 
  TOYOTA = c(5, 9, 8, 9, 2, 3), 
 VOLVO = c(7, 6, 4, 10, 12, 8),
  MERC = c(2, 12, 1, 7, 8, 3),
  MAZDA = c(9, 2, 4, 6, 13, 6),
  NISSAN = c(1, 3, 23, 7, 12, 2),
  HONDA = c(2, 8, 4, 5, 1, 4),
  VW = c(4, 12, 7, 9, 5, 1),
  ROVER = c(1,3, 2, 4, 3, 1))

    

你好,希望你们一切都好。我有一个这样的 df,我想告诉 R 查看一些列。对于小于中位数的值(在 VOLVO 和 VW 中),给出 1 分(否则为 0 分)。对于大于中位数的值(在 NISSAN 和 ROVER 中),记 1 分(否则记 0 分)。如果“SMOKE”中的值为“0”,则得分 1(否则,得分为零)。此外,如果“PRICE”中的值介于 6 和 16 之间(否则为 0),则得分 1,如果 ANTIQUE 中的值为“YES”,则得分 1。最后,将所有这些得分相加到一个新列(SCORE)下。我在下面包含了我的代码,它没有像我想象的那样运行。我确定我在这里做错了什么。请有任何建议。

MY_CARS_SALES$NEWSCORE <- rowSums(cbind(
sapply(MY_CARS_SALES[c("VOLVO" , "VW")], function(x){ifelse(x < median(x), 1, 0)}),
sapply(MY_CARS_SALES[c("NISSAN", "ROVER")], function(x){ifelse(x > median(x), 1, 0)}),
sapply(MY_CARS_SALES["SMOKE"], function(x) {ifelse(x == '0', 1, 0)}),
sapply(MY_CARS_SALES["PRICE"], function(x) {ifelse(x == '6:10', 1, 0)}),
sapply(MY_CARS_SALES["ANTIQUE"], function(x) {ifelse(x == 'YES', 1, 0)})))

标签: r

解决方案


为了与您的代码有最小的差异,

MY_CARS_SALES$NEWSCORE <- rowSums(cbind(
  sapply(MY_CARS_SALES[c("VOLVO" , "VW")], function(x){ifelse(x<median(x), 1, 0)}),
  sapply(MY_CARS_SALES[c("NISSAN", "ROVER")],function(x){ifelse(x>median(x), 1, 0)}),
  sapply(MY_CARS_SALES["SMOKE"], function(x){ifelse(x == '0', 1, 0)}),
  sapply(MY_CARS_SALES["PRICE"], function(x){ifelse(x %in% c(6:16), 1, 0)}),
  sapply(MY_CARS_SALES["ANTIQUE"], function(x){ifelse(x == 'YES', 1, 0)})))

仅将"PRICE"行从ifelse(x == '6:10', 1, 0)toifelse(x %in% c(6:16), 1, 0)NEWSCOREisc(3, 3, 3, 2, 6, 2)


推荐阅读