【问题标题】:Create new column across multiple data frames using dfList使用 dfList 跨多个数据框创建新列
【发布时间】:2020-10-04 10:53:28
【问题描述】:

我有几个数据框都具有相同的列名。我想合并其中的两列以创建一个新列。

数据框如下所示:

我希望输出如下所示:

通常我会很容易地为一个数据框做到这一点:

a$XY_ID <- paste(a$X,ak$Y,sep=":")

如何对列表中的所有数据框执行此操作?

感谢您的帮助!

【问题讨论】:

    标签: r dataframe


    【解决方案1】:

    您可以在lapply 中使用paste 命令:

    dfList <- lapply(dfList, function(x) transform(x, XY_ID = paste(X,Y,sep=":")))
    

    tidyverse 中,您可以使用map 迭代列表,使用unite 组合列。

    dfList <- purrr::map(dfList, ~tidyr::unite(.x, XY_ID, X, Y, sep = ":", remove = FALSE))
    

    【讨论】:

    • 谢谢!尝试您的答案,但都给出错误:tidyverse Error in `[.data.frame`(x, x_vars) : undefined columns selected
    • @Amaranta_Remedios 您能否使用dput 而不是图像添加您的数据,以便我们知道您的数据结构。该错误通常意味着我们指的是数据中不存在的列。也许您有不同的列名称。顺便说一句,我的第一个答案中有错字,我更正了。
    • 从头开始尝试并成功。我的环境中有太多令人困惑的事情。谢谢!!
    【解决方案2】:

    我们可以将do.callpaste 一起使用,如果有很多列要连接,它也可以工作

    dfList <- lapply(dfList, function(x) {
             x$XYID <- do.call(paste, c(x[c('X', 'Y')], sep=":"))
             x })
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-27
      • 2019-08-12
      • 2019-08-29
      • 2019-10-19
      相关资源
      最近更新 更多