繁体   English   中英

在 r 中合并或加入时避免和重命名.x 和.y 列

[英]Avoiding and renaming .x and .y columns when merging or joining in r

我经常 go 关于将两个具有相同名称的数据帧连接在一起。 有没有办法在连接步骤中执行此操作,这样我就不会得到 ax 和 ay 列? 所以名称可能是“original_mpg”和“new_mpg”?

  library(dplyr)
  left_join(mtcars, mtcars[,c("mpg",'cyl')], by=c("cyl"))
  names(mtcars) #ugh

目前,这是dplyr的一个未解决的问题 您必须在连接之前或之后rename ,或者使用基本R的merge ,后者采用suffixes参数。

默认后缀c(".x", ".y")可以通过将它们作为长度为2的字符向量传递来覆盖:

library(dplyr)    
left_join(mtcars, mtcars[,c("mpg","cyl")], 
              by = c("cyl"), 
              suffix = c("_original", "_new")) %>% 
      head()

产量

 mpg_original cyl disp  hp drat   wt  qsec vs am gear carb mpg_new
1           21   6  160 110  3.9 2.62 16.46  0  1    4    4    21.0
2           21   6  160 110  3.9 2.62 16.46  0  1    4    4    21.0
3           21   6  160 110  3.9 2.62 16.46  0  1    4    4    21.4
4           21   6  160 110  3.9 2.62 16.46  0  1    4    4    18.1
5           21   6  160 110  3.9 2.62 16.46  0  1    4    4    19.2
6           21   6  160 110  3.9 2.62 16.46  0  1    4    4    17.8

您可以将后缀与我在 strsplit 的帮助下找到的略微修改的 function 一起使用,使其成为前缀

library(dplyr)    
mt_cars <- left_join(mtcars, mtcars[,c("mpg","cyl")], 
              by = c("cyl"), 
              suffix = c("_original", "_new"))
strReverse <- function(x){
   sapply(lapply(strsplit(x, "_"), rev), paste, collapse = "_")
}
colnames(mt_cars) <- strReverse(colnames(mt_cars))

好吧,当我找到这篇文章时,我也有类似的问题。 我找到了一个不同的解决方案,希望对我有所帮助。

解决方案实际上相当简单,您生成一个包含所有要合并的数据框的列表,然后使用 reduce function。

library(dplyr)   

df_list <- list(df1, df2, df3)
df <- Reduce(function(x, y) merge(x, y, all=TRUE), df_list)

这是我遇到的另一个问题的解决方案,我想简化合并多个数据帧的过程。 但是,如果您在列表中使用两个数据框,它的工作原理是一样的,并且合并不会重命名列。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM