我是R的新手,被困住了。
NB!很抱歉,我无法在示例中弄清楚如何在数字和标题之间添加1个以上的空格,所以我改用“ _”。
问题:
我有两个数据帧(毕业和职业)。我想将职业与毕业证书相匹配。困难的部分是,一个人可能在两个数据框中都出现多次,而我想保留所有数据。
示例:
毕业
一个人可能已经完成了许多课程。原始DF有更多列,但与示例无关。
Person_ID__curriculum_ID__学校ID
___1___________100__________10
___2___________100__________10
___2___________200____________10
___3___________300__________12
___4___________100__________10
___4___________200__________12
职业
不是所有毕业生都有工作,DF中的每个人都应该只有一个主要工作(JOB_Type代码“ 1”),并且可以有0-5个额外的工作(JOB_Type代码“ 0”)。原始DF有更多列,但当前不相关。
Person_ID ___ JOB_ID_____JOB_Type
___1_________1223________1
___3___________3334__________1
___3_________2120________0
___3_________7843________0
___4_________4522________0
___4_________1240________1
最终结果:
名为“结果”的新DF包含第一个DF(毕业)的所有毕业信息以及第二个DF(职业)的添加列。
请注意,人“ 2”不在职业DF中。他们的数据保留,但添加的列保留为空。
请注意,人“ 3”有多个工作,因此添加了多余的重复行。
请注意,如果“ 4”人同时有多个工作和毕业,则添加了额外的行以适合所有数据。
新DF:“结果”
Person_ID__课程ID_School_ID___JOB_ID____JOB_Type
___1___________100__________10_________1223________1
___2___________100__________10
___2___________200____________10
___3___________300__________12_________3334________1
___3___________300__________12_________2122________0
___3___________300__________12_________7843________0
___4___________100__________10_________4522________0
___4___________100__________10_________1240________1
___4___________200__________12_________4522________0
___4___________200__________12_________1240________1
对我来说,最困难的部分是如何使R添加额外的重复行。我环顾四周,以查找有关类似内容但可能的示例或教程。可能我没有使用正确的关键字。
如果能给我示例如何编写代码,我将不胜感激。
答案 0 :(得分:1)
您可以像使用merge
:
merge(Graduations, Occupations, all.x=TRUE)
# Person_ID curriculum_ID School_ID JOB_ID JOB_Type
#1 1 100 10 1223 1
#2 2 100 10 NA NA
#3 2 200 10 NA NA
#4 3 300 12 3334 1
#5 3 300 12 2122 0
#6 3 300 12 7843 0
#7 4 100 10 4522 0
#8 4 100 10 1240 1
#9 4 200 12 4522 0
#10 4 200 12 1240 1
数据:
Graduations <- read.table(header=TRUE, text="Person_ID curriculum_ID School_ID
1 100 10
2 100 10
2 200 10
3 300 12
4 100 10
4 200 12")
Occupations <- read.table(header=TRUE, text="Person_ID JOB_ID JOB_Type
1 1223 1
3 3334 1
3 2122 0
3 7843 0
4 4522 0
4 1240 1")
答案 1 :(得分:1)
带有left_join
library(dplyr)
left_join(Graduations, Occupations)