对列表中的所有数据帧使用R函数separate()

问题描述 投票:0回答:1

我有一个(大)数据框列表,每个数据框都有一列。我想用分隔符将它们分成 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()之外,还有其他方法会更有效吗?

r tidyverse
1个回答
0
投票

没有提供数据或所需的输出,因此我将创建一个我认为类似于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 
© www.soinside.com 2019 - 2024. All rights reserved.