使用 R 中的定界符将具有不同长度且没有模式的文本列拆分为多列

Split the text column with varied length and no pattern to multiple columns using delimiters in R

我有大约 13 列和 20,000 行数据。其中一列有描述细节。描述列有一个或多个值,使用“,”、“-”、“/”、“&”等分隔符分隔。需要根据使用的不同分隔符将 Description 列拆分为多个列。有些值可能只是一个词,不需要拆分。请帮我解决这个问题。

这是我试过的一段代码。但是它不起作用。

df=as.data.frame(openxlsx::read.xlsx("Sample data.xlsx",sheet=1,colNames=TRUE,skipEmptyRows=TRUE))

newdf <- data.frame()
for (i in 1:nrow(df)) 
  {
  out <- strsplit(as.character(df$SHORT_DESC[i]),',')
  newdf <- rbind(newdf, data.frame(t(sapply(out, `[`))))
}

在此之后,我计划按列合并原始数据框(不包括描述)和新数据框(描述分隔在多列中)。但是我上面的代码失败了,我也想用几行代码来执行这个操作。

输入和输出:

NO   SHORT_DESC                     
1    SEAT, HELICAL, COMPRESSION SPRING          
2    RIVET, SOLID, 100 DEGREE COUNTERSUNK HEA   
3    WIRE,NICKEL-COPPER,BULK                    
4    INDUCTOR/ EMI SUPPRESSION                  
5    CHOKE                                      
6    NOM PLATE & LENS                           


No   SHORT_DESC1   SHORT_DESC2    SHORT_DESC3                SHORT_DESC4    
1    SEAT          HELICAL        COMPRESSION SPRING
2    RIVET         SOLID          100 DEGREE COUNTERSUNK HEA
3    WIRE          NICKEL         COPPER                     BULK
4    INDUCTOR      EMI SUPPRESSION
5    CHOKE
6    NOM PLATE     LENS

你可以

your_data %>%
  tidyr::separate(SHORT_DESC, sep = "[,/] *",
                  into = paste0("SHORT_DESC", 1:999)) %>%
  janitor::remove_empty()

哪个returns

# A tibble: 6 x 4
     NO SHORT_DESC1      SHORT_DESC2     SHORT_DESC3               
  <dbl> <chr>            <chr>           <chr>                     
1     1 SEAT             HELICAL         COMPRESSION SPRING        
2     2 RIVET            SOLID           100 DEGREE COUNTERSUNK HEA
3     3 WIRE             NICKEL-COPPER   BULK                      
4     4 INDUCTOR         EMI SUPPRESSION NA                        
5     5 CHOKE            NA              NA                        
6     6 NOM PLATE & LENS NA              NA                        

使用的数据:

your_data <- tibble::tribble(~NO, ~SHORT_DESC, 1, "SEAT, HELICAL, COMPRESSION SPRING", 2, "RIVET, SOLID, 100 DEGREE COUNTERSUNK HEA", 3, "WIRE,NICKEL-COPPER,BULK", 4, "INDUCTOR/ EMI SUPPRESSION", 5, "CHOKE", 6, "NOM PLATE & LENS")