如何在R语言中筛选保留仅含12月日期的data.frame行?
保留data.frame中12月日期行的正确方法
首先要确认你的日期列是Date类型,如果原本是字符格式,先转换适配Year-Month-Day格式:
IBES1985_1990$`Forecast Period End Date, SAS Format` <- as.Date(IBES1985_1990$`Forecast Period End Date, SAS Format`)
你的两种尝试的问题
- 第一种代码错误:
month()函数用法完全错误,它是用来提取日期的月份,不是传入一堆月份数字;同时子集选择语法错误,导致R误判为选择列,所以出现undefined columns where selected。 - 第二种代码错误:
ifelse会强制统一输出类型,日期在R中本质是数值(自1970-01-01起的天数),替换为NA后整个列会变成数值型,丢失日期格式。
正确解决方案
方法1:基础R写法
可以用lubridate包的month()函数,或者base R原生方法直接筛选:
# 方式一:用lubridate包提取月份 library(lubridate) IBES_dec_only <- IBES1985_1990[month(IBES1985_1990$`Forecast Period End Date, SAS Format`) == 12, ] # 方式二:base R原生方法,无需额外包 IBES_dec_only <- IBES1985_1990[format(IBES1985_1990$`Forecast Period End Date, SAS Format`, "%m") == "12", ]
方法2:tidyverse管道写法
用dplyr::filter直接筛选符合条件的行,不会破坏日期格式:
library(dplyr) library(lubridate) IBES_dec_only <- IBES1985_1990 %>% filter(month(`Forecast Period End Date, SAS Format`) == 12)
内容的提问来源于stack exchange,提问作者oreka97
相关产品推荐
相关产品推荐

