微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

合并包含空数据帧的列表时发生cbind错误 数据

如何解决合并包含空数据帧的列表时发生cbind错误 数据

尝试此代码时,出现错误。 “ a”是由从b中的文件提取的数据组成的数据帧的列表。 “ a”中有一些空的数据框/记录:

disclaimer

我收到此错误

b <- list.files(path=".",pattern=".xlsx")
c <- Map(cbind,b,a) 

无论如何我都可以纠正此问题?

解决方法

如果列表元素为空,我们可以将其删除

i1 <- (sapply(b,nrow) > 0) & (sapply(a,nrow) > 0)
Map(cbind,b[i1],a[i1])

或在Map本身内创建条件

out <- Map(function(x,y) if(nrow(x) > 0 & nrow(y) > 0) cbind(x,y),b,a)

假设相应的list元素具有相同的行数

如果在其中一个为空的情况下需要获取原始数据集,则可以这样做

Map(function(x,y) if(is.null(x)|NROW(x) == 0) {
              y} else if(is.null(y)|NROW(y) == 0) {
              x} else cbind(x,a)

数据

a <- list(head(mtcars),data.frame(col1 = numeric(0)),head(iris))
b <- list(data.frame(col1 = numeric(0)),head(iris),head(mtcars))
,

您可以检查a中的行,如果cbind为空,则两个数据帧else返回原始行。

Map(function(x,y) if (nrow(y)) cbind(x,y) else x,a)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。