我有一個名為Listdata.frames 的名稱。我想知道如何將每個元素的名稱("bar1",...,"bar4")轉換List為每個 data.frame 旁邊的列?
我的決賽desired_output如下所示。
List <- list(bar1=data.frame(study="A",sd = 1), bar2=data.frame(study=c("B","C"),sd=2:3),
bar3=data.frame(study="Z",sd = 4), bar4=data.frame(study="H",sd=5))
# desired_output:
"
study sd id
A 1 bar1
B 2 bar2
C 3 bar2
Z 4 bar3
H 5 bar4
"
uj5u.com熱心網友回復:
該dplyr::bind_rows函式有一個.id=引數,您可以使用該引數創建一個列,其中包含您傳入的 data.frames 串列中的名稱。您可以這樣做
bind_rows(List, .id="id")
uj5u.com熱心網友回復:
當我想到迭代一個向量時,我想到map了purrr. 在這種情況下,map2()同時迭代多個引數。我抓取了串列元素的名稱并將它們存盤在一個向量中n:
n <- names(List)
然后我同時迭代List,n呼叫cbind()為每個資料框添加一個變數(即列):
map2(List, n, ~ cbind(.x, Name = .y))
輸出:
$bar1 學習 sd 名稱 1 A 1 巴1 $bar2 學習 sd 名稱 1 B 2 巴2 2 C 3 巴2 $bar3 學習 sd 名稱 1 Z 4 巴3 $bar4 學習 sd 名稱 1 小時 5 巴4
我們可以List通過呼叫以下方法折疊到單個資料框bind_rows():
result <- map2(List, n, ~ cbind(.x, Name = .y))
bind_rows(result)
輸出:
學習 sd 名稱 1 A 1 巴1 2 B 2 巴2 3 C 3 巴2 4 Z 4 bar3 5小時5巴4
作為一個陳述,將是:
map2(List, names(List), ~ cbind(.x, Name = .y)) %>%
bind_rows()
uj5u.com熱心網友回復:
data.frame(do.call(rbind, List),
id = rep.int(names(List), vapply(List, nrow, 0L)),
row.names = NULL)
## study sd id
## 1 A 1 bar1
## 2 B 2 bar2
## 3 C 3 bar2
## 4 Z 4 bar3
## 5 H 5 bar4
uj5u.com熱心網友回復:
這是使用的基本 R 選項Map:
do.call(rbind, unname(Map(cbind, id = names(List), List)))
輸出
id study sd
1 bar1 A 1
2 bar2 B 2
3 bar2 C 3
4 bar3 Z 4
5 bar4 H 5
另一種選擇是使用rbindlistfrom data.table:
rbindlist(List, idcol = "id")
# id study sd
#1: bar1 A 1
#2: bar2 B 2
#3: bar2 C 3
#4: bar3 Z 4
#5: bar4 H 5
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/437416.html
