通过另一个数据框扩展数据框行

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