我有以下数据集
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))))))))))))))))))))
我尝试按照本页底部的示例进行操作但不起作用。
有没有人对如何最好地实现这一新领域有任何想法?
感谢您提供任何帮助。
答案 0 :(得分:1)
让我们在conversion
时调用您想要用来转换值的表格df$sat==0
。哟可以这样做:
df$newgrade<-ifelse(df$sat == 0, conversion$SAT[match(df$act, conversion$ACT)], df$sat)
编辑:如果您想要包含其他条件df$sat ==0
和df$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 ==0
和df$act==0
)您将拥有NAs