我的第一个数据集包含如下所示的行和列。第二列(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
非常感谢任何有关实现这一目标的帮助。
答案 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
的非NA
值Score_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))