使用R组合重复的列
我有一个表,有4列,第1,3列和第2,4列代表相同的变量使用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
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