R 通过另一个数据帧展开数据帧的行
我有一个包含许多行和列的数据框架。一列指定包含更多数据的文件的路径:R 通过另一个数据帧展开数据帧的行,r,tidyverse,R,Tidyverse,我有一个包含许多行和列的数据框架。一列指定包含更多数据的文件的路径: name path 1 a /path/a.csv 2 b /path/b.csv 我想读取该文件,然后使用从该文件创建的数据框展开我的行(即readr::read_csv: t x 1 1 4 2 2 3 3 3 5 4 4 1 示例文件a.c
name path
1 a /path/a.csv
2 b /path/b.csv
我想读取该文件,然后使用从该文件创建的数据框展开我的行(即readr::read_csv
:
t x
1 1 4
2 2 3
3 3 5
4 4 1
示例文件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
期望输出
试试这个:
your_data$df = lapply(your_data$path, read_csv)
tidyr::unnest(your_data)
试试这个:
your_data$df = lapply(your_data$path, read_csv)
tidyr::unnest(your_data)
假设您的第一个数据文件名为
索引
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))
}
假设您的第一个数据文件名为索引
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
#一个tible:7 x 3
名称t x
1A13
2 a 2 1
3 a 3 6
4b14
5 b 2 3
6 b 3 5
7 b 4 1
使用purrr::map\u 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
#一个tible:7 x 3
名称t x
1A13
2 a 2 1
3 a 3 6
4b14
5 b 2 3
6 b 3 5
7 b 4 1
请为特定于代码编辑器RStudio的问题保存RStudio标记(例如,您的代码在RGui或命令行中工作,但在RStudio中不工作)。请为特定于代码编辑器RStudio的问题保存RStudio标记(例如,您的代码在RGui或命令行中工作,但在RStudio中不工作)。