微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用 R 中的其他两个表创建一个表?

如何解决如何使用 R 中的其他两个表创建一个表?

我有两张桌子。一个叫做enrollment,另一个叫做students

报名

student_id   class_id  
004           compsci
010           compsci
002            engli
010            engli
003            engli

学生:

student_id    first_name
  002           Abril
  004           Chris
  010           Davis
  003           Riley

我需要一个像下面这样的输出表,其中只有 class_idfirst_name 出现在上面两个表中 student_idfirst_name 的匹配中。

class_id   first_name   
compsci      Davis
compsci      Chris
engli        Abril
engli        Davis
engli        Riley           
 

数据:

enrollment<-data.frame(student_id=(c(004,010,002,003)),class_id=(c("compsci","compsci","engli","engli")))
student<-data.frame(student.id=c(002,004,003),first_name=(c("Abril","Chris","Davis","Riley")))

     
 

解决方法

您可以使用 merge 命令,即:

colnames(student)[1] <- 'student_id'
joined <- merge(enrollment,student,by='student_id')
joined <- joined[,c('class_id','first_name')]
,

使用dplyr

library(dplyr)
#Code
new <- student %>% left_join(enrollment,by = c('student.id'='student_id')) %>% select(-student.id)

输出:

  first_name class_id
1      Abril    engli
2      Chris  compsci
3      Davis  compsci
4      Davis    engli
5      Riley    engli
,

您也可以使用 data.table 方法:

setDT(enrollment)[student,first_name := i.first_name,on=.(student_id==student.id)][,-'student_id']    

   class_id first_name
     <char>     <char>
1:  compsci      Chris
2:  compsci      Davis
3:    engli      Abril
4:    engli      Davis
5:    engli      Riley
,

我们可以使用 match 中的 base R

enrollment$first_name <- student$first_name[match(enrollment$student_id,student$student.id)]
enrollment[c('class_id','first_name')]

-输出

#    class_id first_name
#1  compsci      Chris
#2  compsci      Davis
#3    engli      Abril
#4    engli      Davis
#5    engli      Riley

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。