合并两个数据集

时间:2016-07-17 17:03:07

标签: r merge

我的第一个数据集包含如下所示的行和列。第二列(Score_d1)中的某些值缺失(NA)。

  StudentID     Score_d1
  012343        NA
  081245        NA
  957600        78
  212945        86
  305049        NA
  407903        92

第二个数据集如下。此数据集仅包含第一个数据集中缺少分数值的StudentIds的分数值。例如,在第一个数据集中,缺少StudentID 012343的得分值,第二个数据集中的Score_d2列包含这些值( 75, 85)

  StudentID     Score_d2
  012343        75
  012343        85
  081245        94
  081245        65
  305049        46

我想通过StudentID合并这两个数据集,以便第一个数据集中的缺失(NA)Score_d1值被第二个数据集中的Score_d2值替换,我将这两个数据集合并到创建如下所示的最终数据集,一对多??

  StudentID     Score
  012343        75
  012343        85
  081245        94
  081245        65
  957600        78
  212945        86
  305049        46
  407903        92

非常感谢任何有关实现这一目标的帮助。

1 个答案:

答案 0 :(得分:2)

你可以这样做:

m <- merge(df1,df2,by = "StudentID",all = T)
m$Score_d1[is.na(m$Score_d1)] <- m$Score_d2[!is.na(m$Score_d2)]
m[,1:2]

  # StudentID Score_d1
# 1     12343       75
# 2     12343       85
# 3     81245       94
# 4     81245       65
# 5    212945       86
# 6    305049       46
# 7    407903       92
# 8    957600       78

我们的想法是首先根据StudentID加入两个数据框,然后将NA的{​​{1}}值替换为Score_d1的非NAScore_d2

数据

df1 <- structure(list(StudentID = c(12343L, 81245L, 957600L, 212945L, 
305049L, 407903L), Score_d1 = c(NA, NA, 78L, 86L, NA, 92L)), .Names = c("StudentID", 
"Score_d1"), class = "data.frame", row.names = c(NA, -6L))

df2 <- structure(list(StudentID = c(12343L, 12343L, 81245L, 81245L, 
305049L), Score_d2 = c(75L, 85L, 94L, 65L, 46L)), .Names = c("StudentID", 
"Score_d2"), class = "data.frame", row.names = c(NA, -5L))