簡體   English   中英

R:在逗號之間提取單詞?

[英]R: Extracting word between commas?

假設我有一個字符串,其中包含以逗號分隔的各種單詞。

"Hello, 1000, "Oh shit, a comma", helloagain"

我想取這樣一個字符串,並給定一個值n ,提取第 n 個和第 (n+1) 個逗號之間的單詞。

因此,例如,如果n = 1 ,我想提取1000 如果n = 2 ,我想提取"Oh shit, a comma" 等等。

我該怎么做呢?

請注意,逗號之間的單詞可以在引號中包含逗號...也可以為空,例如字符串也可以是

"Hello,, 1000"

對於n = 1 ,我們想要單詞""

假設您打算將引​​用的字符串保持在一起(未拆分),這是一個嘗試:

s <- "Hello, 1000, \"Oh shit, a_comma\", helloagain"
gre <- gregexpr("[^\\s\"']+|\"([^\"]*)\"|'([^']*)'", s)
unlist(lapply(regmatches(s, gre), function(z) {
  ifelse(grepl('^"', z), z,
         strsplit(gsub('"', '', z), "[ ,]+"))
}))
# [1] "Hello"                "1000"                 "\"Oh shit, a_comma\"" ""                    
# [5] "helloagain"          

從這里開始,它只是簡單的索引。


另一個可能更好的選擇,注意有人可能已經想出了如何正確標記可選引用的分隔文本(當以這種方式表達時,可能會引發read.csvread.table的想法)。 沒有真正需要嘗試使用正則表達式( https://xkcd.com/1171/ )重新發明輪子。

read.csv(text = s, header = FALSE, stringsAsFactors = FALSE)
#      V1   V2                V3          V4
# 1 Hello 1000  Oh shit, a_comma  helloagain

如果您的字符串向量都具有相同數量的逗號/字段,那么您可以按原樣使用它:

read.csv(text = rep(s, 3), header = FALSE, stringsAsFactors = FALSE)
#      V1   V2                V3          V4
# 1 Hello 1000  Oh shit, a_comma  helloagain
# 2 Hello 1000  Oh shit, a_comma  helloagain
# 3 Hello 1000  Oh shit, a_comma  helloagain

但是,如果它們有不同數量的逗號,則需要手動迭代它們:

out <- lapply(rep(s, 3), function(a) read.csv(text = a, header = FALSE, stringsAsFactors = FALSE))
out
# [[1]]
#      V1   V2                V3          V4
# 1 Hello 1000  Oh shit, a_comma  helloagain
# [[2]]
#      V1   V2                V3          V4
# 1 Hello 1000  Oh shit, a_comma  helloagain
# [[3]]
#      V1   V2                V3          V4
# 1 Hello 1000  Oh shit, a_comma  helloagain

然后你可以從每個中獲取第n個:

sapply(out, `[[`, 2)
# [1] 1000 1000 1000

或每個不同的索引位置:

mapply(`[[`, out, c(1,3,2))
# [1] "Hello"             " Oh shit, a_comma" "1000"             

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM