[英]how to create a new list of data.frames by systematically rearranging columns from an existing list of data.frames
[英]Create list of data.frames with specific rows from list of data.frames
我有許多 data.frames 存儲在列表 (list1) 中,並想用 data.frames 創建一個新列表 (list2),其中第一個包含 list1 中 data.frames 的所有第一行,第二個包含所有第二行等。這是一個例子:
set.seed(42)
df1 <- data.frame(a=sample.int(100,3),b=sample.int(100,3))
df2 <- data.frame(a=sample.int(100,3),b=sample.int(100,3))
list1 <- list(df1,df2)
list1
[[1]]
a b
1 92 84
2 93 64
3 29 51
[[2]]
a b
1 74 71
2 14 46
3 65 100
由此我想創建列表 2,如下所示:
[[1]]
a b
1 92 84
2 74 71
[[2]]
a b
1 93 64
2 14 46
[[3]]
a b
1 29 51
2 65 100
在R
執行此操作的有效方法是什么?
如果所有的行數都相同
nr <- nrow(list1[[1]])
lapply(seq_len(nr), function(i) do.call(rbind, lapply(list1, function(x) x[i,])))
另一種選擇是將其綁定到單個 data.frame,按組創建一個序列並split
,這將處理行數不等的lists
library(dplyr)
library(data.table)
bind_rows(list1, .id = 'grp') %>%
mutate(rn = rowid(grp)) %>%
{split(.[c('a', 'b')], .$rn)}
假設所有數據幀具有相同的行數和列數,以下工作:
split(do.call(rbind, lapply(list1, function(x) x)),
rep(1:nrow(list1[[1]]), length(list1)))
# $`1`
# a b
# 1 92 84
# 2 74 71
#
# $`2`
# a b
# 1 93 64
# 2 14 46
#
# $`3`
# a b
# 1 29 51
# 2 65 100
d = lapply(list1, asplit, 1)
Map(rbind, d[[1]], d[[2]])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.