如何在R中筛选DataFrame,排除以"RT "开头的Twitter转发推文?
解决Twitter推文过滤问题
你的代码问题分析
- 第一段代码的问题:
- 变量名写错了,应该用
df$tweet而非df$var %in%是精确匹配整个字符串,只能筛选出完全等于"RT "的推文,根本达不到过滤开头是"RT "的需求
- 变量名写错了,应该用
- 第二段代码的问题:
- 同样存在变量名错误,且R的DataFrame子集语法中,
df[逻辑向量]默认按列筛选,但你用grepl得到的是和行数一致的逻辑向量(3115行),而你的数据集只有5列,因此触发维度不匹配的错误。必须加上逗号, ]明确表示筛选行。
- 同样存在变量名错误,且R的DataFrame子集语法中,
正确的解决方案
方法1:基础R写法
用grepl匹配以"RT "开头的推文,取反后筛选行,注意用^锚定字符串开头,避免误匹配推文中间出现的"RT ":
new_df <- df[!grepl("^RT ", df$tweet), ]
^RT:正则表达式,匹配以"RT "开头的字符串!:取反,保留不满足条件的行, ]:保留所有列,只筛选行
方法2:tidyverse(dplyr)写法
如果你习惯用tidyverse工具链,代码更直观:
library(dplyr) new_df <- df %>% filter(!str_detect(tweet, "^RT "))
str_detect:和grepl功能类似,检测字符串是否包含指定模式filter:按条件筛选行
内容的提问来源于stack exchange,提问作者yellowephant
相关产品推荐
相关产品推荐

