如何在R语言向量中获取包含字符串"Drake"的所有行?
解决:统计数据框中所有包含"Drake"的行
看起来你遇到的问题是现有代码只捕获了**完全等于"Drake"**的行,而那些包含Drake和其他艺术家的条目(比如"Drake, Kendrick Lamar, Post Malone")没被统计到——这是因为你的匹配方式太严格了。
问题出在哪?
你的代码里:
grep("Drake$", artist)用了正则锚点$,只会匹配**以"Drake结尾"**的字符串;which('Drake' == artist)是精确相等匹配,只有当整行内容完全就是"Drake"时才会被选中。
这两种方式都无法覆盖Drake出现在字符串中间或开头的情况。
正确的解决方案
这里有两种简单的方法来获取所有包含"Drake"的行:
方法1:使用基础R的grep函数
不需要锚点,直接匹配字符串中任意位置的"Drake":
# 读取数据(保留你的原有代码) data <- read.csv("C:/Users/Gabriel/Documents/responses.csv", header = TRUE) artist <- data$artists # 获取所有包含"Drake"的行索引 drake_rows <- grep("Drake", artist, fixed = TRUE) # 查看这些行的索引 drake_rows # 统计总数量 drake_count <- length(drake_rows) drake_count
fixed = TRUE表示我们匹配的是固定字符串(不是正则表达式),这样更准确,避免意外的正则语法干扰;- 如果需要忽略大小写(比如匹配"drake"或"DRAKE"),可以加上
ignore.case = TRUE参数。
方法2:使用tidyverse的str_detect(更直观)
如果你习惯用tidyverse工具链,stringr包的str_detect函数会更易懂:
library(stringr) # 读取数据 data <- read.csv("C:/Users/Gabriel/Documents/responses.csv", header = TRUE) artist <- data$artists # 生成逻辑向量:标记每行是否包含"Drake" has_drake <- str_detect(artist, "Drake") # 获取符合条件的行索引 drake_rows <- which(has_drake) # 统计数量 drake_count <- sum(has_drake) drake_count
这两种方法都能帮你捕获所有包含"Drake"的行,不管它在字符串的哪个位置。
内容的提问来源于stack exchange,提问作者Gabriel
相关产品推荐
相关产品推荐

