![](/img/trans.png)
[英]How do I remove .x.x.x.... and .y.y.y... from headings when I do a full join of multiple dataframes in R?
[英]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.