Excel:合并数据集中的重复列

时间:2019-08-24 18:30:45

标签: r excel dataframe format

原谅最基本的问题。根据条件,我有一个实验的输出,该输出具有相同问题的3个不同版本。输出文件将每个问题视为一个单独的列,因此我的输出看起来像这样,其中各列的标题重复:

Q1,Q2,Q3,Q1,Q2,Q3,Q1,Q2,Q3

1, 0, 1

-----------0, 1, 0

--------------------1, 1, 1

如何合并输出(最好在Excel中-我的输出当前存储在excel文件中,或者存储在R中),以便所需的输出如下所示:

Q1,Q2,Q3
1, 0, 1
0, 1, 0
1, 1, 1

提前谢谢!

1 个答案:

答案 0 :(得分:1)

使用具有读取excel文件(例如R等的函数)的功能读取数据集后,read_excel中的一个选项将是遍历数据集的unique names ,提取列unlist,删除NA元素(如果有-假设空白为NA

nm1 <- unique(sub("\\.\\d+", "", names(df1)))
out <- sapply(nm1, function(x) na.omit(unlist(df1[grep(x, names(df1))])))
row.names(out) <- NULL
out
#     Q1 Q2 Q3
#[1,]  1  0  1
#[2,]  0  1  0
#[3,]  1  1  1

或与tidyversegather/spread一起

library(tidyverse)
gather(df1, na.rm = TRUE) %>% 
   mutate(key = str_remove(key, "\\.\\d+$"), ind = rowid(key)) %>% 
   spread(key, value) %>% 
   select(-ind)
#  Q1 Q2 Q3
#1  1  0  1
#2  0  1  0
#3  1  1  1

或者另一种选择是将split转换为list个具有相似列的data.frame,使用coalescereduce转换为单个向量,这将删除{该行中的{1}}个元素,并获得该行中的第一个非NA元素

NA

数据

split.default(df1, nm1) %>%
      map_df(reduce, coalesce)
# A tibble: 3 x 3
#     Q1    Q2    Q3
#  <dbl> <dbl> <dbl>
#1     1     0     1
#2     0     1     0
#3     1     1     1