R:创建新列并根据差异分配分数的函数

时间:2014-11-08 18:46:11

标签: r

我正在尝试创建一个根据用户输入的成本和权重计算得分的函数。我试图从传递给函数的数据帧中的列中减去用户输入,然后根据差异和用户输入的权重分配分数。然后,我希望将此列添加到数据框中。但是,我很难让它正常工作。任何帮助将不胜感激。

我基本上只是根据用户的成本输入和学校的实际成本之间的差异来为学校分配分数。因此,举例来说,如果用户想要25000的费用而学校的费用是15000,那么我希望它能给这所学校一个最高分。如果学校的费用大大超过了用户的投入成本,那么我想给它一个低分。我希望它计算数据框中每一行的分数。这是我到目前为止所拥有的。

distance = function(table, a, weighta) {
 dist = c((table$In.state.tuition - a))
 if (any(dist <= 0)) {
     score = 10
 }
 else score = 0

finalscore = weighta*score
table$Score = finalscore 
return(table)
}

2 个答案:

答案 0 :(得分:0)

没关系,我使用ifelse功能让它工作。谢谢!

答案 1 :(得分:0)

我不完全确定您的问题是什么,或者您尝试了哪些代码,但在我看来,您希望将10*weighta的分数奖励给有学费的学员。一些用户定义的阈值。如果是这样,我认为这很容易通过标准代码获得(我使用了一些随机值):

set.seed(123)                                     # make it reproducible
df<-data.frame(In.state.tuition =rnorm(20,50,2), score=rep(0,20))
a<-49                                             # arbitrary number
weighta<-3                                        # another arbitrary number
df$score[df$In.state.tuition<=a]<-10*weighta      # use indexing
df
   In.state.tuition score
1          48.87905    30
2          49.53965     0
3          53.11742     0
4          50.14102     0
5          50.25858     0
6          53.43013     0
7          50.92183     0
8          47.46988    30
9          48.62629    30
10         49.10868     0
11         52.44816     0
12         50.71963     0
13         50.80154     0
14         50.22137     0
15         48.88832    30
16         53.57383     0
17         50.99570     0
18         46.06677    30
19         51.40271     0
20         49.05442     0

这是你想要的吗?

作为旁注,我想从你在问题中的最后一条评论中你所说的&#34;我想计算每列的分数&#34;您实际意味着&#34;我想计算In.state.tuition列&#34;中每个的分数。