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"
基本上,您需要一个内部和外部类型应用函数来向下嵌套两层。
我在 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"
基本上,您需要一个内部和外部类型应用函数来向下嵌套两层。