如果我有一個字符串,訪問分割字符串的元素中的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]' –