【发布时间】:2020-10-04 10:53:28
【问题描述】:
我有几个数据框都具有相同的列名。我想合并其中的两列以创建一个新列。
数据框如下所示:
我希望输出如下所示:
通常我会很容易地为一个数据框做到这一点:
a$XY_ID <- paste(a$X,ak$Y,sep=":")
如何对列表中的所有数据框执行此操作?
感谢您的帮助!
【问题讨论】:
我有几个数据框都具有相同的列名。我想合并其中的两列以创建一个新列。
数据框如下所示:
我希望输出如下所示:
通常我会很容易地为一个数据框做到这一点:
a$XY_ID <- paste(a$X,ak$Y,sep=":")
如何对列表中的所有数据框执行此操作?
感谢您的帮助!
【问题讨论】:
您可以在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))
【讨论】:
Error in `[.data.frame`(x, x_vars) : undefined columns selected
dput 而不是图像添加您的数据,以便我们知道您的数据结构。该错误通常意味着我们指的是数据中不存在的列。也许您有不同的列名称。顺便说一句,我的第一个答案中有错字,我更正了。
我们可以将do.call 与paste 一起使用,如果有很多列要连接,它也可以工作
dfList <- lapply(dfList, function(x) {
x$XYID <- do.call(paste, c(x[c('X', 'Y')], sep=":"))
x })
【讨论】: