我有一个(大)数据框列表,每个数据框都有一列。我想用分隔符将它们分成 20 列。在单个数据帧上:
file2=file1 %>%
separate(V1,into=c(paste0("column_",letters[1:20])),sep="\\|")
有没有办法将其应用到整个列表?我试过了:
map(filelist, ~ separate(.x, into=c(paste0("column_",letters[1:20])),sep="\\|"))
返回:
Caused by error in `separate()`:
! `col` is absent but must be supplied.
或者,除了separate()之外,还有其他方法会更有效吗?
没有提供数据或所需的输出,因此我将创建一个我认为类似于OP的最小数据集。
library(tidyverse)
filelist <- list(data1=tibble(V1=c("1|2|3|4|5", "6|7|8|9|10")),
data2=tibble(V1=c("6|7|8|9|10", "11|12|13|14|15")),
data3=tibble(V1=c("16|17|18|19|20", "21|22|23|24|25")))>
filelist
$data1
# A tibble: 2 × 1
V1
<chr>
1 1|2|3|4|5
2 6|7|8|9|10
$data2
# A tibble: 2 × 1
V1
<chr>
1 6|7|8|9|10
2 11|12|13|14|15
$data3
# A tibble: 2 × 1
V1
<chr>
1 16|17|18|19|20
2 21|22|23|24|25
以下两个命令中的任何一个都应该给出所需的输出:
map(filelist, ~ separate(.x,
cols=V1,
into=c(paste0("column_", letters[1:5])),
sep="\\|"))
map(filelist, ~ separate_wider_delim(.x,
cols=V1,
names=c(paste0("column_", letters[1:5])),
delim="|"))
$data1
# A tibble: 2 × 5
column_a column_b column_c column_d column_e
<chr> <chr> <chr> <chr> <chr>
1 1 2 3 4 5
2 6 7 8 9 10
$data2
# A tibble: 2 × 5
column_a column_b column_c column_d column_e
<chr> <chr> <chr> <chr> <chr>
1 6 7 8 9 10
2 11 12 13 14 15
$data3
# A tibble: 2 × 5
column_a column_b column_c column_d column_e
<chr> <chr> <chr> <chr> <chr>
1 16 17 18 19 20
2 21 22 23 24 25