将表格与R中的某些行名称重叠

时间:2018-07-18 20:29:23

标签: r dataframe

虽然我确信以前已经有人问过这个问题,但仔细阅读对类似线程的答复仍然没有帮助我完成这项工作...

我有两个表,A和B。(此示例已简化,但最终我想使用两个表分别为16000行x 390列和15800行x 270列)

A的行名称是(艺术,历史,数学等...,法语,HomeEc ),而B的行名称是(艺术,历史,数学等...,< strong>西班牙语,摄影)。

每个表的列名是20个不同的学生(A:Student1-Student20; B:Student21-Student40)

每张表中的值为测试成绩。

如何在R中合并这两个表,使得最终表包含行名(“艺术”,“历史记录”,“数学”等,“法语”,“ HomeEc”,“西班牙语”,“摄影”)且没有重复,并且每列中的值是学生1-40的对应测试分数(如果原始表中没有该行,则为0)?

非常感谢您!

1 个答案:

答案 0 :(得分:0)

所以您有1组结果(我们称其为df)

df<-data.frame(stringsAsFactors=FALSE,
Subject = c("Arts", "History", "Maths", "French", "HomeEc"),
student_1 = c(50L, 51L, 52L, 53L, 54L),
student_2 = c(67L, 68L, 69L, 70L, 71L),
student_3 = c(82L, 83L, 84L, 85L, 86L))


   Subject student_1 student_2 student_3
1    Arts        50        67        82
2 History        51        68        83
3   Maths        52        69        84
4  French        53        70        85
5  HomeEc        54        71        86

还有另一组结果(df2)

df2<-data.frame(stringsAsFactors=FALSE,
Subject = c("Arts", "History", "Maths", "Spanish", "Photography"),
student_4 = c(40L, 41L, 42L, 43L, 44L),
student_5 = c(71L, 72L, 73L, 74L, 75L),
student_6 = c(92L, 93L, 94L, 95L, 96L)
)

      Subject student_4 student_5 student_6
1        Arts        40        71        92
2     History        41        72        93
3       Maths        42        73        94
4     Spanish        43        74        95
5 Photography        44        75        96

像这样results<-dplyr::full_join(df, df2, by "Subject")组合它们

      Subject student_1 student_2 student_3 student_4 student_5 student_6
1        Arts        50        67        82        40        71        92
2     History        51        68        83        41        72        93
3       Maths        52        69        84        42        73        94
4      French        53        70        85        NA        NA        NA
5      HomeEc        54        71        86        NA        NA        NA
6     Spanish        NA        NA        NA        43        74        95
7 Photography        NA        NA        NA        44        75        96