我有一个包含大量data.frames(d = 100)的列表,每个都包含许多变量(v = 10) . 我想重新排列数据,以便我有一个新的10个data.frames列表,每个列有100列,从100个原始data.frames中的每一个中提取相关列 . 所以新的data.frame1将有100列,每列是原始data.frames的第1列,new data.frame2将有100列,每列是原始data.frames,....,n的第2列 . 重新排列这个的最佳方法是什么 . 先感谢您 .
这是一种使用虚拟数据的方法,因为您没有提供输入 .
df1 <- df2 <- df3 <- df4 <- df5 <- data.frame(v1 = 1:3, v2 = 4:6) lst <- mget(ls(pattern = "^df"))
我假设你的列表看起来像上面的 lst . 这里我们有5个数据框,每个数据框有2列,我们重新排列它,最终得到一个包含2个数据帧的列表,每个数据帧包含5列 .
lst
split_idx <- seq_len(unique(lengths(lst))) # in your case, this should give you 1:10 out <- split.default(x = Reduce(cbind, lst), split_idx) #$`1` # v1 v1.1 v1.2 v1.3 v1.4 #1 1 1 1 1 1 #2 2 2 2 2 2 #3 3 3 3 3 3 #$`2` # v2 v2.1 v2.2 v2.3 v2.4 #1 4 4 4 4 4 #2 5 5 5 5 5 #3 6 6 6 6 6
split.default 沿列拆分列表 .
split.default
如果我们需要更改每个数据框的名称,我们可能会这样做
out <- lapply(out, function(x) { names(x) <- paste0(gsub("(v[0-9]+)\\.+", "\\1", names(x)), "_", 1:5) x }) out #$`1` # v1_1 v1_2 v1_3 v1_4 v1_5 #1 1 1 1 1 1 #2 2 2 2 2 2 #3 3 3 3 3 3 #$`2` # v2_1 v2_2 v2_3 v2_4 v2_5 #1 4 4 4 4 4 #2 5 5 5 5 5 #3 6 6 6 6 6
1 回答
这是一种使用虚拟数据的方法,因为您没有提供输入 .
我假设你的列表看起来像上面的
lst
. 这里我们有5个数据框,每个数据框有2列,我们重新排列它,最终得到一个包含2个数据帧的列表,每个数据帧包含5列 .split.default
沿列拆分列表 .如果我们需要更改每个数据框的名称,我们可能会这样做