【问题标题】:R rbind dataframes returns a list [closed]R rbind 数据帧返回一个列表 [关闭]
【发布时间】:2018-06-21 00:22:39
【问题描述】:

我遇到了一个问题,并设法通过 hack 解决了它,我希望了解问题并希望摆脱 hack。

我尝试重新创建问题无济于事,所以这里的文字就足够了。

我正在尝试rbind R 中的两个数据框,其结果必须再次是数据框,而不是列表。我在大部分脚本中都使用rbind,以前从未遇到过问题。

但是,今天我将 rbind 应用于两个数据帧,例如 foobar,它返回了 list foobar。我用来解决此问题的技巧是强制将foobar 转换为数据帧再次,如下所示:

rbind(data.frame(foo), data.frame(bar))

这行得通,但我想知道为什么当foobar 都已经是data.frames 时我必须显式转换它。

我的问题是,当两个输入都是 data.frames 时,rbind 在什么“一般”场景下会返回 list

我尝试通过查看rbind(A,A)rbind(B,B) 对其进行调试。两次它都返回一个数据帧而不是一个list。那为什么rbind(A,B) 会返回list

谢谢!

【问题讨论】:

  • 很难说没有foobar
  • 它对我有用。确保你有相同的变量名。
  • @patL 当你没有看到 OP 的实际数据时,你怎么知道它对你有用?
  • 我在想 foobar 实际上不是数据帧,可能是向量列表或列表中的数据帧。请为我们dput这些对象。
  • 由于这对未来的读者没有帮助,只是简单地忽略了您的环境,因此可能需要删除它。

标签: r list dataframe rbind


【解决方案1】:

如果您的数据框之一实际上是tibble,您需要使用dplyr::bind_rows() 而不是rbind(),因为dplyr::bind_rows() 专门用于处理小标题(它也适用于数据框一般来说)。由于 tibbles 是 tidyverse 的发明,它不一定与 rbind() 之类的基本函数完全兼容(在您提出之前,我自己并不知道会发生这种行为)。

更多关于这两个函数的区别,以及为什么你可能想要使用dplyr::bind_rows()而不是rbind(),可以找到here

【讨论】:

  • 感谢您的回答。虽然我同意这个问题不是最好的,但我一直在努力解决完全相同的问题:为什么一个简单的 rbind 只产生一个列表而不是一个 data.table。
猜你喜欢
  • 2019-11-05
  • 1970-01-01
  • 2022-10-02
  • 2010-12-11
  • 2020-04-04
  • 1970-01-01
  • 1970-01-01
  • 2015-02-01
  • 1970-01-01
相关资源
最近更新 更多