繁体   English   中英

当我完全连接 R 中包含相同列名的多个数据帧时,如何从标题中删除.xxx...和.yyy..?

[英]How do I remove .x.x.x.... and .y.y.y... from headings when I do a full join of multiple dataframes that contain same column names in R?

文件1

国家 名称 种族 一种 C
.. .. .. .. .. ..

文件2

国家 名称 种族 一种 C
.. .. .. .. .. ..

档案3

国家 名称 种族 一种 C
.. .. .. .. .. ..

文件4

国家 名称 种族 一种 C
.. .. .. .. .. ..

上面是一个 some.csv 数据帧,我分配给一个名为file.list的变量,然后使用lapply 目的是将每个数据帧完全连接成一个数据帧,如下面的代码所示。

file.list= c(file1.csv, file2.csv, file3.csv, file4.csv)

df.list <- lapply(file.list, read.csv)

data <-df.list %>% reduce(full_join, by=c("Country", "Name", "Race"))

数据

国家 名称 种族 斧头 Bx C.x 哎呀 经过 C.y 斧头 Bxx C.xx 哎呀 拜拜 C.yy
.. .. .. .. .. .. .. .. .. .. .. .. .. .. ..

虽然完全连接使用上面的代码工作,但标题在其名称后面添加了 ax 或 y。 我怎样才能完全加入,以便标题保留其原始名称而没有.xx..和.yy。 在后面? 它应该是保留每一列的水平连接。 我发现如果我添加,suffix=c("","") ,“A”、“B”和“C”列将合并。 我也尝试过if (endsWith(colnames(data), ".x")==TRUE){但不确定如何继续。

样本数据

df_list <- list(structure(list(Country = c("Rf", "Ew"), Name = c("wef",
"eggw"), Race = c("wed", "qw"), A = 1:2, B = 1:2, C = 1:2), class = "data.frame", row.names = c(NA,
-2L)), structure(list(Country = c("Gw", "Wd"), Name = c("wef",
"eggw"), Race = c("wed", "qw"), A = 3:4, B = 5:6, C = 7:8), row.names = c(NA,
-2L), class = "data.frame"), structure(list(Country = c("Qp",
"Ew"), Name = c("wef", "eggw"), Race = c("wed", "qw"), A = 3:4,
    B = 10:11, C = 7:8), row.names = c(NA, -2L), class = "data.frame"))

所需 output

  Country Name Race  A  B  C  A  B  C  A  B  C
1      Ew eggw   qw  2  2  2 NA NA NA  4 11  8
2      Gw  wef  wed NA NA NA  3  5  7 NA NA NA
3      Qp  wef  wed NA NA NA NA NA NA  3 10  7
4      Rf  wef  wed  1  1  1 NA NA NA NA NA NA
5      Wd eggw   qw NA NA NA  4  6  8 NA NA NA

我不知道你为什么要重复名称,但我认为我们不能强制dplyr::*_join这样做,但我们可以强制base::merge这样做。

purrr::reduce(df_list, merge, by=c("Country","Name","Race"), suffix=c("",""), all=TRUE, check.names=FALSE)
# Warning in merge.data.frame(out, elt, ...) :
#   column names 'A', 'B', 'C' are duplicated in the result
# Warning in merge.data.frame(out, elt, ...) :
#   column names 'A', 'B', 'C', 'A', 'B', 'C' are duplicated in the result
#   Country Name Race  A  B  C  A  B  C  A  B  C
# 1      Ew eggw   qw  2  2  2 NA NA NA  4 11  8
# 2      Gw  wef  wed NA NA NA  3  5  7 NA NA NA
# 3      Qp  wef  wed NA NA NA NA NA NA  3 10  7
# 4      Rf  wef  wed  1  1  1 NA NA NA NA NA NA
# 5      Wd eggw   qw NA NA NA  4  6  8 NA NA NA

尽管可以使用 suppressWarnings suppressWarnings警告,但无法避免警告。

我们可以重命名列名 - 删除后缀:

colnames(data)[ 4:ncol(data) ] <- sub("([^.]+)\\.[[:alnum:]]+$", "\\1", 
                                      colnames(data)[ 4:ncol(data) ])

data
#   Country Name Race  A  B  C  A  B  C  A  B  C
# 1      Rf  wef  wed  1  1  1 NA NA NA NA NA NA
# 2      Ew eggw   qw  2  2  2 NA NA NA  4 11  8
# 3      Gw  wef  wed NA NA NA  3  5  7 NA NA NA
# 4      Wd eggw   qw NA NA NA  4  6  8 NA NA NA
# 5      Qp  wef  wed NA NA NA NA NA NA  3 10  7

暂无
暂无

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

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