簡體   English   中英

在R中重新排列列表和數據框

[英]Rearranging lists and dataframes in R

我有一個包含大量data.frames(d = 100)的列表,每個都包含許多變量(v = 10)。 我想重新排列數據,以便我有一個包含10個data.frames(每個100列)的新列表,並從100個原始data.frames中的每個提取相關列。 因此,新的data.frame1將有100列,分別是原始data.frames的第一列,新的data.frame2將有100列,分別是原始data.frames,....,n的第二列。 重新安排此的最佳方法是什么。 先感謝您。

這是一種使用虛擬數據的方法,因為您沒有提供輸入。

df1 <- df2 <- df3 <- df4 <- df5 <- data.frame(v1 = 1:3, v2 = 4:6)
lst <- mget(ls(pattern = "^df"))

我認為您的清單看起來像上面的lst 在這里,我們有5個數據幀,每個數據幀有2列,我們對其進行了重新排列,以便最終得到2個數據幀的列表,每個數據幀包含5列。

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沿列分割列表。


如果我們需要更改每個數據框的名稱,我們可以這樣做

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

暫無
暫無

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

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