首页 > 解决方案 > 如何将 lapply 用于 concat.split()

问题描述

如何使用lapply相同的分隔符“,”将列拆分为多列。从我正在使用的数据框的第 12 列到第 14 列,有多个单词字符串,我想用分隔符“,”在每一列中拆分。

因此,某些行之间c(12:14)最多有两到四个逗号分隔符。因此,我不知道会从 concat.split 创建多少新列。

我正在尝试使用concat.split来完成工作。

这是我使用的代码,它不起作用。

library(splitstackshape)

concatsplit<-function(x){concat.split(.,"x",",")}

dataframe_concat<- lapply(dataframe[c(12:14)], concatsplit)

提前感谢您的指导!

标签: rsplitlapply

解决方案


这个答案没有回答“如何使用 lapply”的问题。但是,如果您愿意使用其他软件包而不是splitstackshape

您可以使用 stringr 中的函数来查找分隔符的最大出现次数str_count。然后,您可以使用此计数来判断separate您将拥有多少额外的列。

library(dplyr)
library(tidyr)
library(stringr)

df <- tibble(a = c("a,b,c", "A,b", "A,B,C,C,D,E"),
             b = 1:3)
#not run
#> df
# A tibble: 3 x 2
#  a               b
#  <chr>       <int>
#1 a,b,c           1
#2 A,b             2
#3 A,B,C,C,D,E     3
df %>% 
  separate(a,
           into = paste0("a_",
                            as.character(1:(max(str_count(df$a, ","))+1))),
           sep = ",")



# output:
## A tibble: 3 x 7
#  a_1   a_2   a_3   a_4   a_5   a_6       b
#  <chr> <chr> <chr> <chr> <chr> <chr> <int>
#1 a     b     c     NA    NA    NA        1
#2 A     b     NA    NA    NA    NA        2
#3 A     B     C     C     D     E         3

推荐阅读