R strsplit,嵌套列表蓝调

R strsplit, nested lists blues

我在 R 中遇到了这个问题,我想在逗号上拆分字符串,然后在分号上进一步拆分,但只保留分号之前的第一项,即下面的 ee 和 jj。我尝试了很多东西,但嵌套列表似乎太复杂了!

这是我正在做的事情:

d <- c("aa,bb,cc,dd,ee;e,ff",
       "gg,hh,ii,jj;j")

e=strsplit(d,",")
myfun2 <- function(x,arg1) {
 strsplit(x,";")
}
f=lapply(e,myfun2)
f=
 [[1]]
 [[1]][[1]]
 [1] "aa"

 [[1]][[2]]
 [1] "bb"

 [[1]][[3]]
 [1] "cc"

 [[1]][[4]]
 [1] "dd"

 [[1]][[5]]
 [1] "ee" "e" 

 [[1]][[6]]
 [1] "ff"

 [[2]]
 [[2]][[1]]
 [1] "gg"

 [[2]][[2]]
 [1] "hh"

 [[2]][[3]]
 [1] "ii"

 [[2]][[4]]
 [1] "jj" "j" 

这是我想要的输出

Correct output=
[[1]]
[1] "aa" "bb" "cc" "dd" "ee" "ff"

[[2]]
[1] "gg" "hh" "ii" "jj"

我尝试了很多使用 lapply 到嵌套列表 "f" 的方法,并使用了“[[”和“[”但没有成功。

非常感谢任何帮助。 (我知道我遗漏了一些愚蠢的东西,但现在想不通!)

我们可以使用gsub匹配模式;后接一个或多个字母字符,替换为'',然后将(strsplit)拆分为,.

strsplit(gsub(';[a-z]+', '', d), ',')
#[[1]]
#[1] "aa" "bb" "cc" "dd" "ee" "ff"

#[[2]]
#[1] "gg" "hh" "ii" "jj"

这是您的代码

d <- c("aa,bb,cc,dd,ee;e,ff", "gg,hh,ii,jj;j")
e <- strsplit(d,",")
myfun2 <- function(x,arg1) { strsplit(x,";") }
f <- lapply(e,myfun2)

如果我们从您的f开始,那么下一步就是

lapply(f,function(x) mapply(`[`,x,1))
[[1]]
[1] "aa" "bb" "cc" "dd" "ee" "ff"

[[2]]
[1] "gg" "hh" "ii" "jj"

基本上,您需要一个内部和外部类型应用函数来向下嵌套两层。