【问题标题】:R Dataframe CombinationR数据框组合
【发布时间】:2014-07-30 03:46:59
【问题描述】:

我知道这是一个常见问题。然而,在 R 中组合数据框时的常见问题是存在重叠列,并且列需要函数。

这不是我的问题。我目前在 R 中有 2 个数据框。它们有一组完全不同的列,除了两者共有的 ID 列。

有一个主要和次要数据集(这很重要,因为并非主要的所有值都存在于次要中)

我想将 2 列从辅助数据框添加到主数据框。

所以我当前使用的方法是遍历主节点的所有行。检查它是否存在于辅助中,如果存在,则添加行

primary$newCol1 <- Secondary$newCol1[Matching stuff here]

主要问题是数据集非常庞大,每个数据集大约有 900 万行和大量列。因此,该过程非常缓慢。我相信我有一个正确的解决方案。但是就天数而言,运行时间是不可能的。

一个简单的例子是

rowC = nrow(dataframe1)
for(i in 1:rowC){
matchedRow = Dataframe1$id[i] == dataframe2$id
if dataframe1$id[i] %in% dataframe2$id{
dataframe1$newcol[i] <- dataframe2$newcol[matchedRow]
}
else{dataframe1$newcol[i]<- 'Unknown'}

任何帮助将不胜感激

【问题讨论】:

    标签: r dataframe


    【解决方案1】:

    试试合并功能。

    myResult = merge(dataframe1, dataframe2)
    

    查看帮助页面后,您将整理出所有内容,但知道您可以指定要加入哪些列(在这种情况下,这将是常见的 'id' 列),并且您可以指定外部连接。在您的情况下,您可以考虑对数据框中的列数进行子集化,如下所示:

    myResult = merge(dataframe1, dataframe2[, c(columnIwant, anotherColumn)])
    

    【讨论】:

    • 您好,感谢您的快速回复。我对合并的担忧是数据帧大小的时间复杂度。请参阅下面的 SO 链接基准 stackoverflow.com/questions/4322219/…
    • 我已经看到使用 dplyr 包中的 inner_join()left_join() 获得了巨大的加速。它比 merge() 高 10-1000 倍。
    猜你喜欢
    • 2016-12-09
    • 1970-01-01
    • 1970-01-01
    • 2022-10-05
    • 2013-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-13
    相关资源
    最近更新 更多