考虑这个R代码和输出:
> the_string <- "a, b, c"
> the_vec <- strsplit(the_string, ",")
> str(the_vec)
List of 1
$ : chr [1:3] "a" " b" " c"
> str(sub("^ +", "", the_vec))
chr "c(\"a\", \" b\", \" c\")"
看起来sub返回单个字符数组而不是字符数组的向量。我希望:
chr [1:3] "a" "b" "c"
我如何得到它?
编辑:the_string将来自用户,所以我想容忍可变数量的空格,零到多。
编辑:令牌中间可能有空格应该保留。因此,"a, b c,d"
应该会产生c('a', 'b c', 'd')
。
答案 0 :(得分:3)
the_string <- "a, b, c"
the_vec <- unlist(strsplit(the_string, ", "))
如果你在逗号之后添加空格并取消整个事物,你就得到了矢量。
<强>更新强>
如果字符串在字符之间有不同的空格,我会删除所有多余的空格,然后运行与上面相同的空格。我选择了5但也许你的字符串有更多。另外,我添加了第二步,以分割字符之间没有逗号的字符。
a <- "a, b, c, d, e, f g, h,i"
a <- gsub("( {2,5})", " ",a)
a <- unlist(strsplit(a, ", |,"))
unlist(strsplit(a, " "))
[1] "a" "b" "c" "d" "e" "f" "g" "h" "i"
答案 1 :(得分:1)
strsplit
创建一个列表,其中每个元素都是原始向量中每个项目的拆分向量,例如:
strsplit( c("a, b, c", "d, e"), ",")
[[1]]
[1] "a" " b" " c"
[[2]]
[1] "d" " e"
这里输入向量中只有一个项目,因此结果全部出现在列表的第一项中:
the_string <- "a, b, c"
the_list <- strsplit(the_string, ",")
sub("^ +", "", the_list[[1]])
[1] "a" "b" "c"
如果您不使用[[1]]
或unlist
,the_list
会使用as.character
强制转换为字符向量:
as.character(the_list)
[1] "c(\"a\", \" b\", \" c\")"
答案 2 :(得分:0)
一个基础-R解决方案
lapply(the_vec, function(x) sub("^ +", "", x))[[1]]
[1] "a" "b" "c"