Note that there are some explanatory texts on larger screens.

plurals
  1. POMerge multiple data frames - Error in match.names(clabs, names(xi)) : names do not match previous names
    primarykey
    data
    text
    <p>I'm getting some really bizarre stuff while trying to merge multiple data frames. Help!</p> <p>I need to merge a bunch of data frames by the columns 'RID' and 'VISCODE'. Here is an example of what it looks like:</p> <pre><code>d1 = data.frame(ID = sample(9, 1:100), RID = c(2, 5, 7, 9, 12), VISCODE = rep('bl', 5), value1 = rep(16, 5)) d2 = data.frame(ID = sample(9, 1:100), RID = c(2, 2, 2, 5, 5, 5, 7, 7, 7), VISCODE = rep(c('bl', 'm06', 'm12'), 3), value2 = rep(100, 9)) d3 = data.frame(ID = sample(9, 1:100), RID = c(2, 2, 2, 5, 5, 5, 9,9,9), VISCODE = rep(c('bl', 'm06', 'm12'), 3), value3 = rep("a", 9), values3.5 = rep("c", 9)) d4 = data.frame(ID =sample(8, 1:100), RID = c(2, 2, 5, 5, 5, 7, 7, 7, 9), VISCODE = c(c('bl', 'm12'), rep(c('bl', 'm06', 'm12'), 2), 'bl'), value4 = rep("b", 9)) dataList = list(d1, d2, d3, d4) </code></pre> <p>I looked at the answers to the question titled <a href="https://stackoverflow.com/questions/2209258/merge-several-data-frames-into-one-data-frame-with-a-loop">"Merge several data.frames into one data.frame with a loop."</a> I used the reduce method suggested there as well as a loop I wrote:</p> <pre><code>try1 = mymerge(dataList) try2 &lt;- Reduce(function(x, y) merge(x, y, all= TRUE, by=c("RID", "VISCODE")), dataList, accumulate=F) </code></pre> <p>where dataList is a list of data frames and mymerge is:</p> <pre><code>mymerge = function(dataList){ L = length(dataList) mdat = dataList[[1]] for(i in 2:L){ mdat = merge(mdat, dataList[[i]], by.x = c("RID", "VISCODE"), by.y = c("RID", "VISCODE"), all = TRUE) } mdat } </code></pre> <p>For my test data and subsets of my real data, both of these work fine and produce exactly the same results. However, when I use larger subsets of my data, they both break down and give me the following error: Error in match.names(clabs, names(xi)) : names do not match previous names.</p> <p>The really weird thing is that using this works:</p> <pre><code> dataList = list(demog[1:50,], neurobat[1:50,], apoe[1:50,], mmse[1:50,], faq[1:47, ]) </code></pre> <p>And using this fails:</p> <pre><code> dataList = list(demog[1:50,], neurobat[1:50,], apoe[1:50,], mmse[1:50,], faq[1:48, ]) </code></pre> <p>As far as I can tell, there is nothing special about row 48 of faq. Likewise, using this works:</p> <pre><code>dataList = list(demog[1:50,], neurobat[1:50,], apoe[1:50,], mmse[1:50,], pdx[1:47, ]) </code></pre> <p>And using this fails:</p> <pre><code>dataList = list(demog[1:50,], neurobat[1:50,], apoe[1:50,], mmse[1:50,], pdx[1:48, ]) </code></pre> <p>Row 48 in faq and row 48 in pdx have the same values for RID and VISCODE, the same value for EXAMDATE (something I'm not matching on) and different values for ID (another thing I'm not matching on). Besides the matching RID and VISCODE, I see anything special about them. They don't share any other variable names. This same scenario occurs elsewhere in the data without problems. </p> <p>To add icing on the complication cake, this doesn't even work:</p> <pre><code>dataList = list(demog[1:50,], neurobat[1:50,], apoe[1:50,], mmse[1:50,], faq[1:48, 2:3]) </code></pre> <p>where columns 2 and 3 are "RID" and "VISCODE". </p> <p>48 isn't even the magic number because this works:</p> <pre><code> dataList = list(demog[1:500,], neurobat[1:500,], apoe[1:500,], mmse[1:457,]) </code></pre> <p>while using mmse[1:458, ] fails. </p> <p>I can't seem to come up with test data that causes the problem. Has anyone had this problem before? Any better ideas on how to merge?</p>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload