2015-11-05 52 views
1

我有一个向量courses如何根据矢量的索引来转换列中的值?

courses <- c("Math","English","Sport","Physik", "Chemie") 

# > courses 
[1] "Math" "English" "Sport" "Physik" "Chemie" 

我有一个数据帧enrollment

enrollment <- data.frame(course=c("Sport", "Physik", "Sport", "English", "English", "Math", "Chemie", "Math")) 

> enrollment 
    course 
1 Sport 
2 Physik 
3 Sport 
4 English 
5 English 
6 Math 
7 Chemie 
8 Math 

我想要做的是从指数转列过程中的值从enrollment到COURSE_ID course

> enrollment 
    couse_id 
1  3 
2  4 
3  3 
4  2 
5  2 
6  1 
7  5 
8  1 

我该如何有效地做到这一点?

如果我想用which()获得课程索引并使用apply()将它应用于enrollment,我该如何编写代码?

+2

'as.numeric(因子(招生$当然,水平=课程))'或'比赛(报名$当然,课程)'这IHA更清晰的意图我,但我会认为效率较低 – user20650

+1

@ user20650 - 发布'em up! 'fastmatch :: fmatch'也可以用于更快的匹配 –

+0

干杯,理查德 – user20650

回答

1

一对夫妇的接近

as.numeric(factor(enrollment$course, levels=courses)) 

其中levels参数确保值是有序如预期

match(enrollment$course, courses) 

返回内courses

每个 enrollment$course的索引位置

而对于一个更快的比赛 - 从RichardScriven

fastmatch::fmatch(enrollment$course, courses) 
相关问题