原谅最基本的问题。根据条件,我有一个实验的输出,该输出具有相同问题的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
提前谢谢!
答案 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
或与tidyverse
和gather/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,使用coalesce
将reduce
转换为单个向量,这将删除{该行中的{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