簡體   English   中英

Excel:合並數據集中的重復列

[英]Excel: Merging Repeating Columns Within A Dataset

原諒最基本的問題。 根據條件,我有一個實驗的輸出,該輸出具有相同問題的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

提前致謝!

使用讀取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.frames的,使用coalesce ,以reduce它的單個載體,其將消除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

數據

df1 <- structure(list(Q1 = c(1, NA, NA), Q2 = c(0, NA, NA), Q3 = c(1, 
NA, NA), Q1.1 = c(NA, 0, NA), Q2.1 = c(NA, 1, NA), Q3.1 = c(NA, 
0, NA), Q1.2 = c(NA, NA, 1), Q2.2 = c(NA, NA, 1), Q3.2 = c(NA, 
NA, 1)), class = "data.frame", row.names = c(NA, -3L))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM