2
> imqd = read.csv("csv/quest/IMQ.csv")
> demod = read.csv("csv/DEMO.csv")
> mcqd = read.csv("csv/quest/MCQ.csv")
> 
> length(demod)
[1] 145
> length(demod[[1]])
[1] 9965
> length(mcqd)
[1] 168
> length(mcqd[[1]])
[1] 9493
> length(imqd)
[1] 5
> length(imqd[[1]])
[1] 9965
> 
> mydata = merge(imqd, demod)
> length(mydata)
[1] 148
> length(mydata[[1]])
[1] 9965

到现在为止还挺好。但是,如果我尝试mcqd与任何东西合并,我会丢失大部分行,即使数据对我来说看起来不错。

> intersect(intersect(names(imqd), names(mcqd)), names(demod))
[1] "X"    "seqn"

> finaldata = merge(mydata, mcqd)
> length(finaldata)
[1] 314
> length(finaldata[[1]])
[1] 18

为什么现在只有 18 行?

如果你想在家一起玩,你可以在这里获取 csv 文件

4

1 回答 1

1

merge试图只返回在每个公共列上匹配的行。查看MCQ.csv,我们看到第 20 行开始:

"19",20,2,NA,

merge不会使用这一行。两个公共列,第一列和第二列,对于每个文件都不匹配。pk要合并的数据是明确的seqn。所以,我们可以简单地使用by参数来merge

> finaldata = merge(mydata, mcqd, by="seqn")
于 2012-06-25T21:57:13.710 回答