R语言按月份筛选数据:brexit_polls数据集四月起始日期民意调查统计问题
解决brexit_polls四月民意调查统计的问题
嘿,我来帮你搞定这个问题!不用纠结tibbletime加载失败或者复杂的正则表达式,其实用基础R或者常用的tidyverse工具就能轻松解决,而且完全不需要额外安装有问题的包。
方法1:用tidyverse的lubridate(推荐,直观简洁)
dslabs包通常和tidyverse搭配使用,而lubridate是tidyverse里专门处理日期的工具,用它提取月份再筛选超方便:
# 加载必要的包 library(dslabs) library(tidyverse) # 加载brexit_polls数据 data(brexit_polls) # 统计四月的民意调查数量 april_polls_count <- brexit_polls %>% # 从startdate中提取月份(返回1-12的数字) mutate(poll_month = month(startdate)) %>% # 筛选月份为4的行 filter(poll_month == 4) %>% # 统计行数 nrow() # 查看结果 print(april_polls_count)
这个方法的好处是直接针对日期类型操作,不需要把日期转成字符串,避免了正则匹配可能出现的格式问题。
方法2:纯基础R实现(无需额外包)
如果你不想加载tidyverse,用基础R的函数也能完成:
# 加载数据 library(dslabs) data(brexit_polls) # 确保startdate是日期格式(如果原始数据不是的话) brexit_polls$startdate <- as.Date(brexit_polls$startdate) # 筛选四月的调查并统计数量 april_polls_count <- nrow(subset(brexit_polls, format(startdate, "%m") == "04")) # 查看结果 print(april_polls_count)
这里format(startdate, "%m")会把日期转换成两位的月份字符串(比如四月就是"04"),然后用subset筛选后,nrow直接统计数量,完全依赖基础R,肯定能运行。
关于你之前尝试的问题说明
- 你用的
regex(startdate,"....-04-..")不对,因为dplyr里没有直接的regex函数,而且如果startdate是日期类型(不是字符串),正则匹配是无效的。如果非要用正则,得先把日期转成字符串再用str_detect,但这种方法不如上面的直观,不推荐:
# 不推荐的正则方法,仅作参考 april_polls_regex <- brexit_polls %>% filter(str_detect(as.character(startdate), "^\\d{4}-04-\\d{2}")) %>% nrow()
- 至于
tibbletime加载失败,大概率是依赖包版本冲突或者安装不完整,但其实根本不需要这个包,上面的两种方法已经足够解决问题了。
内容的提问来源于stack exchange,提问作者Austin
相关产品推荐
相关产品推荐

