如果我有一个字符串,访问分割字符串的元素中的R
x <- "Hello World"
我怎样才能进入第二个字,“世界”,用字符串分割,之后
x <- strsplit(x, " ")
X [ [2]]没有做任何事情。
如果我有一个字符串,访问分割字符串的元素中的R
x <- "Hello World"
我怎样才能进入第二个字,“世界”,用字符串分割,之后
x <- strsplit(x, " ")
X [ [2]]没有做任何事情。
正如在评论中提到的,重要的是要认识到strsplit
返回一个列表对象。由于你的例子只是分割一个项目(一个长度为1的矢量),你的列表是长度1.我将用一个稍微不同的例子来解释,输入长度为3的矢量(3个文本项目进行分割):
input <- c("Hello world", "Hi there", "Back at ya")
x <- strsplit(input, " ")
> x
[[1]]
[1] "Hello" "world"
[[2]]
[1] "Hi" "there"
[[3]]
[1] "Back" "at" "ya"
请注意,返回的列表有3个元素,每个元素对应一个输入向量。每个列表元素按照strsplit
调用进行拆分。因此,我们可以调用任何使用[[
这些列表中的元素(这是你的x[[2]]
电话是干什么的,但你只有一个列表元素,这就是为什么你不能得到任何回报):
> x[[1]]
[1] "Hello" "world"
> x[[3]]
[1] "Back" "at" "ya"
现在我们可以通过附加一个[
电话获得任何这些列表元素的第二部分:
> x[[1]][2]
[1] "world"
> x[[3]][2]
[1] "at"
这将从每个列表元素返回的第二项(注意,“回到雅”输入已恢复“在”在这种情况下)。您可以使用apply
家族中的产品一次完成所有项目。 sapply
将返回一个载体,这可能将是很好的在这种情况下:
> sapply(x, "[", 2)
[1] "world" "there" "at"
在这里输入(2)传递给[
运营商,这意味着操作x[2]
的最后一个值被应用到每个列表元素。
如果不是第二个项目,你想每个列表元素的最后的项目,我们可以sapply
通话中使用tail
,而不是[
:
> sapply(x, tail, 1)
[1] "world" "there" "ya"
这一次,我们已经将tail(x, 1)
应用于每个列表元素,为我们提供最后一项。
作为优选,我最喜欢的应用这样的操作方式与magrittr
管,用于第二单词,像这样:
x <- input %>%
strsplit(" ") %>%
sapply("[", 2)
> x
[1] "world" "there" "at"
或者最后一个字:
x <- input %>%
strsplit(" ") %>%
sapply(tail, 1)
> x
[1] "world" "there" "ya"
这是' X [[1] [2]'。 'strsplit'返回一个列表。拆分字符串位于列表结果的第一个元素中。 '“世界”是该元素的第二个值。也可以做'scan(text = x,what =“”)[2]' –