使用R组合重复的列

使用R组合重复的列,r,R,我有一个表,有4列,第1,3列和第2,4列代表相同的变量 Codes Description Codes Description xxxxx describes xxxxx zzzzz describes zzzzz yyyyy describes yyyyy 12345 describes 12345 我想把这个表转换成 Codes Description xxxxx describes xxxxx

我有一个表,有4列,第1,3列和第2,4列代表相同的变量

Codes    Description        Codes     Description
xxxxx    describes xxxxx    zzzzz     describes zzzzz
yyyyy    describes yyyyy    12345     describes 12345
我想把这个表转换成

Codes    Description       
xxxxx    describes xxxxx    
zzzzz    describes zzzzz
yyyyy    describes yyyyy  
12345    describes 12345
现在,我正在通过以下方式使用:

df_temp <- df[,3:4]
df <- df[, - c(3, 4)]
df <- rbind(df, df_temp)

df_temp您可以使用
duplicated
功能动态识别和
rbind
重复列:

combine_duplicates <- function(df) {
   duplicate_columns <- duplicated(colnames(df))
   return(rbind(df[,duplicate_columns], df[,!duplicate_columns]))
}
combine_duplicates(df)

combine_duplicates以某种合理的顺序(code,desc,code,desc或code,code,desc,desc)适用于任意数量的变量对的通用答案是:


names(dat)一种基于列表的方法,具有
purr

library(purrr)

df %>% map(as.character) %>%    # convert factors to character, leave as list
    split(names(.)) %>%    # split list by column names
    map_df(flatten_chr)   # unlist each element and reassemble to data.frame

## # A tibble: 4 × 2
##   Codes     Description
##   <chr>           <chr>
## 1 xxxxx describes xxxxx
## 2 yyyyy describes yyyyy
## 3 zzzzz describes zzzzz
## 4 12345 describes 12345

如果列顺序从未改变,为什么不
bind\r您是在尝试将所有表中的所有列合并到一个大表中,还是在尝试为四列表中的每一列保留单独的组合表2列表?理想情况下,我希望轻松地将所有表合并到一个大表中?第2行应该阅读重复的列谢谢,我已经纠正了错误。@ScottRitchie-无论列如何排列,您对如何执行此操作有何建议?@LateMail-无论我们是否知道它有重复的列名,此操作是否适用于任何数据帧?
library(purrr)

df %>% map(as.character) %>%    # convert factors to character, leave as list
    split(names(.)) %>%    # split list by column names
    map_df(flatten_chr)   # unlist each element and reassemble to data.frame

## # A tibble: 4 × 2
##   Codes     Description
##   <chr>           <chr>
## 1 xxxxx describes xxxxx
## 2 yyyyy describes yyyyy
## 3 zzzzz describes zzzzz
## 4 12345 describes 12345
as.data.frame(lapply(split(lapply(df, 
                                  as.character), 
                           names(df)), 
                     unlist))

##   Codes     Description
## 1 xxxxx describes xxxxx
## 2 yyyyy describes yyyyy
## 3 zzzzz describes zzzzz
## 4 12345 describes 12345