【问题标题】:How can I combine sparse columns in a data fame?如何在数据名中组合稀疏列?
【发布时间】:2014-09-25 22:58:37
【问题描述】:

我有一个 R 脚本,它创建一个包含 61 列的数据框。 data.frame 是通过将一堆 csv 文件读取到 data.frames 列表中,然后合并列表以使列表中每个 data.frame 中的常用命名列填充结果 data.frame 中的同一列。 /p>

一些应该合并的列在 csv 文件中的命名不一致(例如 date.received vs received.on.date vs date.sample.received),我想知道合并它们的最佳方法是什么是。

我有几个想法:

  • 在合并之前重命名列。
  • 一旦我有了我的 data.frame,使得在该行中具有值的列是 用过

第二种方法可能(以及如何?)还是有更好的方法?

【问题讨论】:

    标签: r dataframe consolidation


    【解决方案1】:

    第二种方法是可能的,使用dplyr 包中的rbind_all 很容易。方法如下:

    首先,如果你有一些关于应该堆叠在一起的列名的模式的信息,我建议你在堆叠之前尝试修复它,比如:

    colnames_synonymous <- c("date.received", "received.on.date", "date.sample.received")
    
    list_of_dfs <- lapply(list_of_dfs, function(df) {
      names(df)[names(df) %in% colnames_synonymous] <- "date_received"
      return(df)
    })
    

    现在你可以开始了:

    dplyr::rbind_all(list_of_dfs)
    

    在正确堆叠所有列之前,您可能需要进行一些调整,但现在,您只需更改 lapply 函数即可。我发现这种方式比在 rbinding 之后进行一些列转换更容易。

    【讨论】:

    • 这就是我实现第一种方法的方式。是什么让第二种方法更加困难?
    • 实际上,我对这个问题没有确定的答案,但我会尝试支持第一种方法(我在回答中称之为“第二种”,对此感到抱歉)=P。首先,通过第二种方法,您最终可能会得到一个不必要的大数据帧,从而导致内存问题。根据您处理的 dfs 数量,这可能具有挑战性,一旦您必须在这个大 data.frame 上进行一些修复和其他一些操作。此外,第一种方法的一个优点是,要获得正确的列,您需要做的就是改进第一个 lapply。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-22
    • 1970-01-01
    • 2021-04-27
    • 1970-01-01
    相关资源
    最近更新 更多