通过另一个数据框扩展数据框行
Expand rows of dataframe via a another dataframe
我有一个包含许多行和列的数据框。一列指定包含更多数据的文件的路径:
name path
1 a /path/a.csv
2 b /path/b.csv
我想读取该文件,然后使用从该文件创建的数据框扩展我的行(即 readr::read_csv
:
示例文件 a.csv
t x
1 1 3
2 2 1
3 3 6
和b.csv
:
t x
1 1 4
2 2 3
3 3 5
4 4 1
期望输出
name t x
1 a 1 3
2 a 2 1
3 a 3 6
4 b 1 4
5 b 2 3
6 b 3 5
7 b 4 1
试试这个:
your_data$df = lapply(your_data$path, read_csv)
tidyr::unnest(your_data)
假设您的第一个数据文件名为 index
,
do.call(rbind,apply(index, 1, function(X){temp = read.csv(X[2]);cbind(name=X[1], temp)}))
或者,for
循环应该使代码更清晰:
combined = NULL
for (i in 1:nrow(index)){
temp = read.csv(index$path[i])
combined = rbind(combined, cbind(name = index$name[i], temp))
}
使用purrr::map_df
library(tidyverse)
df %>%
deframe %>%
map_df(read_csv, .id = "name")
输出:
# A tibble: 7 x 3
name t x
<chr> <int> <int>
1 a 1 3
2 a 2 1
3 a 3 6
4 b 1 4
5 b 2 3
6 b 3 5
7 b 4 1
我有一个包含许多行和列的数据框。一列指定包含更多数据的文件的路径:
name path
1 a /path/a.csv
2 b /path/b.csv
我想读取该文件,然后使用从该文件创建的数据框扩展我的行(即 readr::read_csv
:
示例文件 a.csv
t x
1 1 3
2 2 1
3 3 6
和b.csv
:
t x
1 1 4
2 2 3
3 3 5
4 4 1
期望输出
name t x
1 a 1 3
2 a 2 1
3 a 3 6
4 b 1 4
5 b 2 3
6 b 3 5
7 b 4 1
试试这个:
your_data$df = lapply(your_data$path, read_csv)
tidyr::unnest(your_data)
假设您的第一个数据文件名为 index
,
do.call(rbind,apply(index, 1, function(X){temp = read.csv(X[2]);cbind(name=X[1], temp)}))
或者,for
循环应该使代码更清晰:
combined = NULL
for (i in 1:nrow(index)){
temp = read.csv(index$path[i])
combined = rbind(combined, cbind(name = index$name[i], temp))
}
使用purrr::map_df
library(tidyverse)
df %>%
deframe %>%
map_df(read_csv, .id = "name")
输出:
# A tibble: 7 x 3
name t x
<chr> <int> <int>
1 a 1 3
2 a 2 1
3 a 3 6
4 b 1 4
5 b 2 3
6 b 3 5
7 b 4 1