[英]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)
)
這個問題背后的另一個問題是會有不同數量的行,我不知道如何在數據框中考慮,因為列需要具有相同的長度。
預先感謝您的幫助,非常感謝。
我們可以在使用unlist
遍歷list
后lapply
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.