r - 使用 dplyr 从日期中提取月份
问题描述
我正在尝试从格式化为字符的日期中提取月份。我首先将第 1 列中的字符串转换为日期格式(类字符)。但是,我无法提取月份。
df <- data.frame(col1=c(44008, 44001, NA, 77), col2=c(43476, 43479, 77, NA))
df
col1 col2
1 44008 43476
2 44001 43479
3 NA 77
4 77 NA
我的尝试
df %>%
# convert to date
mutate_at(vars(col1), funs(case_when((nchar(col1)>4)~(as.character(as.Date(as.numeric(col1), origin="1899-12-30"))), TRUE~as.character(col1))) ) %>%
mutate(
# extract month
col1_month = case_when(nchar(col1)==10~lubridate::month(col1), TRUE~as.character(col1)))
我尝试了各种技巧,但似乎无法让它发挥作用。
期望的输出:
col1 col2 col1_month
1 2020-06-26 43476 6
2 2020-06-19 43479 6
3 <NA> 77 NA
4 77 NA 77
解决方案
我认为您的逻辑和代码比它需要的要复杂得多。我只需将所有内容转换col1
为日期,将其存储在自己的列中并提取月份。
df <- df %>%
mutate(Date = as.Date(col1, origin="1899-12-30"),
Month = month(Date))
col1 col2 Date Month
1 44008 43476 2020-06-26 6
2 44001 43479 2020-06-19 6
3 NA 77 <NA> NA
4 77 NA 1900-03-17 3
然后应用逻辑在以后使用特定范围内的日期。例如:
df %>%
filter(nchar(col1) > 4) %>%
# do stuff...
推荐阅读
- javascript - 如何为此 javascript 元素添加背景颜色?
- azure-sql-database - 为什么 azure sql 的 sys.dm_db_missing_index_groups 没有更新?
- flutter - 如何在颤振应用程序中添加对所有语言环境的货币符号的支持
- javascript - Vue 未解析的变量 PhpStorm
- ios - 在 SwiftUI 中,如何在 UIView 内或作为 UIView 使用 UIHostingController?
- php - How to display errors when error occurs using bootstrap in php
- c# - 为什么我的网络摄像头没有在 c# 中流式传输视频?
- nativescript - 将 NativeScript 项目部署到 Web 浏览器?
- laravel - 如何在 Laravel 中正确实现这种多态关系?
- java - 将生产 Android 应用程序从 Windows 7 正确移动/移植到基于 Linux 的系统