簡體   English   中英

有沒有辦法自動將彼此下方的 append 數據框列合並為大型數據框列表中的一列?

[英]Is there a way to automatically append data frame columns below each other into one column within large list of data frames?

我有一個包含數千個數據框的大列表。 這些數據框各有多個列。 因此,我想在這些數據框中的每一個中自動將列綁定到一列中。 這意味着它們被附加在彼此下方,如下所示。 此后,我會將列表轉換為一個數據框,由於原始列表中每個元素的列數不同,該數據框的列長度會有所不同。

由此:

y1 y2
1  4
2  5
3  6

對此:

y1
1
2
3
4
5
6

這應該針對列表中的每個元素完成,因此解決方案需要考慮到有數千個不同的數據幀,不能單獨提及(示例):

df1 = data.frame(
  X1 = c(1, 2, 3),
  X1.2 = c(4, 5, 6)
)
 df2 = data.frame(
  X2 = c(7, 8, 9),
  X2.2 = c(1, 4, 6)
)
df3 = data.frame(
  X3 = c(3, 4, 1),
  X3.2 = c(8, 3, 5),
  X3.3 = c(3, 1, 9)
)
 
listOfDataframe = list(df1, df2, df3)

最終 output:

df_final = data.frame(
  X1 = c(1, 2, 3, 4, 5, 6),
  X2 = c(7, 8, 9, 1, 4, 6),
  X3 = c(3, 4, 1, 8, 3, 5, 3, 1, 9)
)

這個問題背后的另一個問題是會有不同數量的行,我不知道如何在數據框中考慮,因為列需要具有相同的長度。

預先感謝您的幫助,非常感謝。

R內部列表結構: 列出帶有數據框元素的 L

我們可以在使用unlist遍歷listlapply

lst1 <- lapply(listOfDataframe, \(x)
   setNames(data.frame(unlist(x, use.names = FALSE)), names(x)[1]))

-輸出

lst1
[[1]]
  X1
1  1
2  2
3  3
4  4
5  5
6  6

[[2]]
  X2
1  7
2  8
3  9
4  1
5  4
6  6

[[3]]
  X3
1  3
2  4
3  1
4  8
5  3
6  5
7  3
8  1
9  9

如果我們需要將list轉換為單個 data.frame,請使用qPCR中的cbind.na

do.call(qpcR:::cbind.na, lst1)
  X1 X2 X3
1  1  7  3
2  2  8  4
3  3  9  1
4  4  1  8
5  5  4  3
6  6  6  5
7 NA NA  3
8 NA NA  1
9 NA NA  9

這是一個 tidyverse 解決方案:

library(dplyr)
library(purrr)
listOfDataframe %>% 
  map(~.x %>% stack(.)) %>% 
  map(~.x %>% select(-ind))
[[1]]
  values
1      1
2      2
3      3
4      4
5      5
6      6

[[2]]
  values
1      7
2      8
3      9
4      1
5      4
6      6

[[3]]
  values
1      3
2      4
3      1
4      8
5      3
6      5
7      3
8      1
9      9

暫無
暫無

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

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