Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从R中的字符串向量中提取单个单词_R_String_Stringr - Fatal编程技术网

从R中的字符串向量中提取单个单词

从R中的字符串向量中提取单个单词,r,string,stringr,R,String,Stringr,假设我有一个像下面这样的字符串向量,我想创建一个逻辑向量,如果字符串中出现“white”、“bull”或“tiger”(请注意,不是whitetip),则该向量包含TRUE,如果不出现则包含FALSE。我如何在R中进行此操作?我曾尝试使用stringr的str_detect(),但结果显示“whitetip”为真(我不知道如何对每个类别使用str_detect(),也就是说,我必须创建多个逻辑向量-白虎和公牛的3个类别各1个)。任何帮助都会很棒,谢谢 string<-c("tiger?",

假设我有一个像下面这样的字符串向量,我想创建一个逻辑向量,如果字符串中出现“white”、“bull”或“tiger”(请注意,不是whitetip),则该向量包含TRUE,如果不出现则包含FALSE。我如何在R中进行此操作?我曾尝试使用stringr的str_detect(),但结果显示“whitetip”为真(我不知道如何对每个类别使用str_detect(),也就是说,我必须创建多个逻辑向量-白虎和公牛的3个类别各1个)。任何帮助都会很棒,谢谢

string<-c("tiger?", "thought to involve a 2.7 m [9'], 400-kb bull",
    "4 m to 5 m [13' to 16.5'] white", "oceanic whitetip shark, 2.5 to 3m", 
    "white","white","bull","white","oceanic whitetip shark, 2.5m","tiger",
    "white, >6'","bull, 6'")

string这里有一种方法可以匹配所有字符串

sapply(c("white","bull","tiger"), function(x) {
    grepl(paste0("\\b",x,"\\b"), string)
})
这给

      white  bull tiger
 [1,] FALSE FALSE  TRUE  # tiger?
 [2,] FALSE  TRUE FALSE  # thought to involve a 2.7 m [9'], 400-kb bull
 [3,]  TRUE FALSE FALSE  # 4 m to 5 m [13' to 16.5'] white
 [4,] FALSE FALSE FALSE  # oceanic whitetip shark, 2.5 to 3m
 [5,]  TRUE FALSE FALSE  # white
 [6,]  TRUE FALSE FALSE  # white
 [7,] FALSE  TRUE FALSE  # bull
 [8,]  TRUE FALSE FALSE  # white
 [9,] FALSE FALSE FALSE  # oceanic whitetip shark, 2.5m
[10,] FALSE FALSE  TRUE  # tiger
[11,]  TRUE FALSE FALSE  # white, >6'
[12,] FALSE  TRUE FALSE  # bull, 6'

这里有一种方法可以匹配所有字符串

sapply(c("white","bull","tiger"), function(x) {
    grepl(paste0("\\b",x,"\\b"), string)
})
这给

      white  bull tiger
 [1,] FALSE FALSE  TRUE  # tiger?
 [2,] FALSE  TRUE FALSE  # thought to involve a 2.7 m [9'], 400-kb bull
 [3,]  TRUE FALSE FALSE  # 4 m to 5 m [13' to 16.5'] white
 [4,] FALSE FALSE FALSE  # oceanic whitetip shark, 2.5 to 3m
 [5,]  TRUE FALSE FALSE  # white
 [6,]  TRUE FALSE FALSE  # white
 [7,] FALSE  TRUE FALSE  # bull
 [8,]  TRUE FALSE FALSE  # white
 [9,] FALSE FALSE FALSE  # oceanic whitetip shark, 2.5m
[10,] FALSE FALSE  TRUE  # tiger
[11,]  TRUE FALSE FALSE  # white, >6'
[12,] FALSE  TRUE FALSE  # bull, 6'

如果需要提取相关单词,可以使用
stringr::str\u extract

str_extract(string, "\\b(bull|tiger|white)\\b")

# [1] "tiger" "bull"  "white" NA      "white" "white" "bull"  "white" NA     
#[10] "tiger" "white" "bull"

如果需要提取相关单词,可以使用
stringr::str\u extract

str_extract(string, "\\b(bull|tiger|white)\\b")

# [1] "tiger" "bull"  "white" NA      "white" "white" "bull"  "white" NA     
#[10] "tiger" "white" "bull"

看起来您的报价对于您的示例输入来说都是一团糟。这不是一个有效的R语句。您还可以清楚地知道采样向量的期望输出是什么。您可以将正则表达式中的单词边界与
\b
匹配,因此您可能应该将其包括在内。您到底尝试使用了什么代码?好的,这里是正确的向量:stringI也尝试了akrun,并且它只提供了TRUE的结果,当且仅当值中只有“白色”“bull”或“tiger”字符时(因此它为tiger返回FALSE?例如),看起来您的引号对于示例输入来说都是一团糟的。这不是一个有效的R语句。您还可以清楚地知道采样向量的期望输出是什么。您可以将正则表达式中的单词边界与
\b
匹配,因此您可能应该将其包括在内。您尝试使用的代码到底是什么?好的,这是正确的向量:stringI也尝试了akrun的,它只提供了TRUE的结果,当且仅当值中只有“white”“bull”或“tiger”字符时(因此它为tiger返回FALSE?例如),是否有方法从原始向量中提取“bull”“tiger”和“white”(命名字符串)。例如:“被认为涉及2.7米[9'],400 kb的公牛”我只想得到“公牛”我尝试了str_提取(字符串,[a-z]+”)-对于“被认为涉及2.7米[9'],400 kb的公牛”它不返回“公牛”,但它对“老虎?”、“白色,>6”和“公牛,6”(分别返回老虎、白色和公牛)有效。再次感谢大家!如果“bull”的
grepl()
返回
TRUE
,那么您知道它在那里。为什么需要“提取”它?我不明白。我想要一个向量,它是白牛或老虎,这样我就可以按组总结这里没有显示的其他变量(鲨鱼攻击次数)@CyrusM听起来像是你应该接受这个答案并问一个新问题。有没有办法从原始向量(命名字符串)中提取“bull”、“tiger”和“white”。例如:“被认为涉及一个2.7米[9'],400 kb的bull”我只想得到“bull”,我尝试了str_extract(字符串,[a-z]+”)——它不会返回“bull”“被认为涉及一个2.7米[9'],400 kb的公牛”,但它确实适用于“老虎?”、“白色,>6”和“公牛,6”(分别返回老虎、白色和公牛)。再次感谢大家!如果“公牛”的
grepl()
返回
TRUE
,那么您知道它在那里。为什么需要“提取”“是吗?我不明白。我想要一个向量是白牛或老虎,这样我就可以按组总结这里没有显示的另一个变量(鲨鱼攻击的次数)@CyrusM听起来你应该接受这个答案并提出一个新问题