gpt4 book ai didi

r - 合并多个数据帧 - match.names(clas, names(xi)) : names do not match previous names 中的错误

转载 作者:行者123 更新时间:2023-12-03 10:01:14 27 4
gpt4 key购买 nike

在尝试合并多个数据框时,我得到了一些非常奇怪的东西。帮助!

我需要通过“RID”和“VISCODE”列合并一堆数据框。这是它的外观示例:

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)

我查看了题为 "Merge several data.frames into one data.frame with a loop." 的问题的答案。我使用了那里建议的 reduce 方法以及我写的循环:
try1 = mymerge(dataList)

try2 <- Reduce(function(x, y) merge(x, y, all= TRUE,
by=c("RID", "VISCODE")), dataList, accumulate=F)

其中 dataList 是数据框列表, mymerge 是:
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
}

对于我的测试数据和真实数据的子集,这两种方法都可以正常工作并产生完全相同的结果。但是,当我使用更大的数据子集时,它们都会崩溃并给我以下错误: match.names(clas, names(xi)) 中的错误:名称与以前的名称不匹配。

真正奇怪的是使用这个作品:
  dataList = list(demog[1:50,],
neurobat[1:50,],
apoe[1:50,],
mmse[1:50,],
faq[1:47, ])

使用这个失败:
  dataList = list(demog[1:50,],
neurobat[1:50,],
apoe[1:50,],
mmse[1:50,],
faq[1:48, ])

据我所知,常见问题解答的第 48 行没有什么特别之处。同样,使用这个作品:
dataList = list(demog[1:50,],
neurobat[1:50,],
apoe[1:50,],
mmse[1:50,],
pdx[1:47, ])

使用这个失败:
dataList = list(demog[1:50,],
neurobat[1:50,],
apoe[1:50,],
mmse[1:50,],
pdx[1:48, ])

faq 中的第 48 行和 pdx 中的第 48 行具有相同的 RID 和 VISCODE 值,相同的 EXAMDATE 值(我不匹配的东西)和不同的 ID 值(我不匹配的另一件事)。除了匹配的 RID 和 VISCODE,我还看到了它们的任何特别之处。它们不共享任何其他变量名称。同样的情况在数据的其他地方发生,没有问题。

为了给复杂功能锦上添花,这甚至不起作用:
dataList = list(demog[1:50,],
neurobat[1:50,],
apoe[1:50,],
mmse[1:50,],
faq[1:48, 2:3])

其中第 2 列和第 3 列是“RID”和“VISCODE”。

48 甚至不是神奇的数字,因为它有效:
 dataList = list(demog[1:500,],
neurobat[1:500,],
apoe[1:500,],
mmse[1:457,])

使用 mmse[1:458, ] 失败。

我似乎无法提出导致问题的测试数据。以前有人遇到过这个问题吗?关于如何合并有更好的想法吗?

最佳答案

不幸的是,不确定我能提供帮助,但我想我会发布,因为我发现这个正在寻找有关此错误的帮助。我有效地拥有的是:

a <- cbind(b,c)
d <- merge(a,e)

我得到了同样的错误。使用 a <- data.frame(b,c)解决了问题,但我不知道为什么。
object.size(a);1248124200 bytes

object.size(c);1248124032 bytes

所以有些事情是不同的。所有类都一样, str()什么都不透露。我难住了。

希望这有助于其他知情人士。

关于r - 合并多个数据帧 - match.names(clas, names(xi)) : names do not match previous names 中的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2504543/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com