我有一個list具有相同列數和不同行數的資料框。像這個例子:
dfs_list <- list(data.frame(var1 = seq(1:10), var2 = LETTERS[1:10]),
data.frame(var1 = seq(1:20), var3 = LETTERS[1:20]),
data.frame(var1 = seq(1:15), var2 = LETTERS[1:15]))
對于每個資料框,我需要根據我在城市中擁有的向量在開頭添加一列
city <- c("city1", "city2", "city3")
始終資料幀dfs_list的數量與向量的元素數量相匹配city
我用for回圈制作了這個解決方案
for (i in seq_along(city)) {
dfs_list[[i]] <- mutate(dfs_list[[i]], city = city[i], .before = 1)
}
我想知道是否有另一種不需要使用 for 回圈的解決方案,因為當我將它推廣到一大群城市時,我發現它有點慢。
uj5u.com熱心網友回復:
我們可以使用Mapwith cbindinbase R
dfs_list <- Map(cbind, city = city, dfs_list)
-輸出
dfs_list
$city1
city var1 var2
1 city1 1 A
2 city1 2 B
3 city1 3 C
4 city1 4 D
5 city1 5 E
6 city1 6 F
7 city1 7 G
8 city1 8 H
9 city1 9 I
10 city1 10 J
$city2
city var1 var3
1 city2 1 A
2 city2 2 B
3 city2 3 C
4 city2 4 D
5 city2 5 E
6 city2 6 F
7 city2 7 G
8 city2 8 H
9 city2 9 I
10 city2 10 J
11 city2 11 K
12 city2 12 L
13 city2 13 M
14 city2 14 N
15 city2 15 O
16 city2 16 P
17 city2 17 Q
18 city2 18 R
19 city2 19 S
20 city2 20 T
$city3
city var1 var2
1 city3 1 A
2 city3 2 B
3 city3 3 C
4 city3 4 D
5 city3 5 E
6 city3 6 F
7 city3 7 G
8 city3 8 H
9 city3 9 I
10 city3 10 J
11 city3 11 K
12 city3 12 L
13 city3 13 M
14 city3 14 N
15 city3 15 O
或者在 中tidyverse,這可以用map2(或者如果它是命名的list,那么imap)
library(purrr)
library(dplyr)
map2(dfs_list, city, ~ .x %>%
mutate(city = .y, .before = 1))
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/446306.html
標籤:r
