在R - SAT / ACT测试中嵌套的IF Else

时间:2017-08-09 20:45:23

标签: r nested

我有以下数据集

df <- data.frame(student=c(1,2,3,4,5,6,7,8,9), sat=c(365,0,545,630,385,410,0,655,0), act=c(28,20,0,0,16,17,35,29,21))

student     sat    act
    1       365    28
    2         0    20
    3       545     0
    4       630     0
    5       385    16
    6       410    17
    7         0    35
    8       655    29
    9         0    21

我想创建一个具有以下条件的新字段

如果有SAT分数&gt; 0使用SAT分数 如果SAT = 0,则使用量规here将ACT转换为SAT分数。 (当SAT分数中有一个范围时,我只使用了中位数。

ACT SAT
8   200
9   210
10  220
11  225
12  250
13  285
14  325
15  360
16  385
17  410
18  440
19  465
20  485
21  505
22  525
23  545
24  560
25  575
26  595
27  615
28  635
29  655
30  675
31  700
32  725
33  750
34  775
35  790
36  800

这是一个ifelse声明。我试过这个:

df$newgrade=-ifelse(ACT=8,200, ifelse (ACT=9,210, ifelse(ACT=10,220, ifelse (ACT=11,225, ACT=12,250, ifelse(ACT=13,285, ifelse (ACT=14,325, ACT=15,D, ifelse(ACT=16,C, ifelse (ACT=17,B, ACT=18,D, ifelse(ACT=19,C, ifelse (ACT=20,B, ACT=21,D, ifelse(ACT=22,C, ifelse (ACT=23,B, ACT=24,D, ifelse(ACT=25,C, ifelse (ACT=26,B, ACT=27,D, ifelse(ACT=28,C, ifelse (ACT=29,B, ACT=30,D, ifelse(ACT=31,C, ifelse (ACT=32,B, ACT=33,D, ifelse(ACT=34,C, ifelse (ACT=35,B, ACT=36,D))))))))))))))))))))

我尝试按照本页底部的示例进行操作但不起作用。

有没有人对如何最好地实现这一新领域有任何想法?

感谢您提供任何帮助。

1 个答案:

答案 0 :(得分:1)

让我们在conversion时调用您想要用来转换值的表格df$sat==0。哟可以这样做:

df$newgrade<-ifelse(df$sat == 0, conversion$SAT[match(df$act, conversion$ACT)], df$sat)

编辑:如果您想要包含其他条件df$sat ==0df$act==0,然后df$new grade==0,则可以添加其他ifelse:

df$newgrade<-ifelse(df$sat == 0 & df$act == 0, 0, ifelse(df$sat == 0, conversion$SAT[match(df$act, conversion$ACT)], df$sat))

或在创建列df[is.na(df)]<-0后使用df$newgrade,因为在这些情况下(df$sat ==0df$act==0)您将拥有NAs