R语言使用subset函数提取子集时如何将日期转为星期
解决方案
你可以通过嵌套transform函数和subset函数,在做子集提取的同时完成星期转换,不需要分两步操作。
方法1:纯base R实现(无需加载额外包)
直接用base自带的weekdays()函数转换日期为星期,代码如下:
# 若date列是字符型,先执行这一步转成日期格式 # Rversions$date <- as.Date(Rversions$date) result <- transform( subset(Rversions, select = c(nickname, date), !is.na(nickname) & !is.na(date)), 星期 = weekdays(date) )
方法2:配合lubridate包自定义输出格式
如果你习惯用lubridate的wday函数,可以设置参数控制输出是缩写还是完整星期名:
library(lubridate) result <- transform( subset(Rversions, select = c(nickname, date), !is.na(nickname) & !is.na(date)), 星期 = wday(date, label = TRUE, abbr = FALSE) # abbr设为TRUE时输出星期缩写 )
可选:dplyr管道流写法
如果偏好管道流的写法,也可以用dplyr实现,逻辑更直观:
library(dplyr) library(lubridate) result <- Rversions %>% # 排除两个字段含NA的记录 filter(!is.na(nickname), !is.na(date)) %>% # 提取需要的字段 select(nickname, date) %>% # 新增星期列 mutate(星期 = wday(date, label = TRUE, abbr = FALSE))
最终输出会在原有两列基础上新增星期列,示例效果如下:
nickname date 星期 79 Great Pumpkin 2011-10-31 星期一 80 December Snowflakes 2011-12-22 星期四 81 Gift-Getting Season 2012-02-29 星期三 82 Easter Beagle 2012-03-30 星期五 83 Roasted Marshmallows 2012-06-22 星期五
内容的提问来源于stack exchange,提问作者SaltySenator
相关产品推荐
相关产品推荐

