首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在R中创建日历df

在R中创建日历df
EN

Stack Overflow用户
提问于 2021-02-21 23:02:08
回答 2查看 280关注 0票数 2

我目前正在创建一个Calendar df,以加入到我的其他dfs中,并且最初以以下方式对其进行编码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Date <- seq(as.Date("2020-01-01"), as.Date("2021-12-31"), by="days")
Calendar <- data.frame(Date)

Calendar$DateNo <- format(Calendar$Date, format = "%d")
Calendar$NameDay <- format(Calendar$Date, format = "%A")
Calendar$MonthNo <- format(Calendar$Date, format = "%m")
Calendar$NameMonth <- format(Calendar$Date, format = "%B")
Calendar$NameMonthShort <- format(Calendar$Date, format = "%b")
Calendar$Week <- format(Calendar$Date, format = "%V")
Calendar$Year <- format(Calendar$Date, format = "%Y")
Calendar$Quarter <- quarter(Calendar$Date, with_year = F, fiscal_start = 7)
Calendar$Month_Year <-paste(Calendar$NameMonthShort,Calendar$Year,sep="-")
Calendar$Quarter_Year <-paste(Calendar$Quarter,Calendar$Year,sep="-")

在将我的数据绘制成ggplot的过程中遇到了一些问题之后,我遇到了一种使用带有突变的lubridate包来创建它的替代方法。我的新代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Date <- seq(as.Date("2020-01-01"), as.Date("2021-12-31"), by="days")
Calendar <- data.frame(Date)

Calendar <- Calendar %>%
  mutate(
    DateNo = day(Date),
    NameDay = wday(Date,label = TRUE),
    MonthNo = month(Date),
    NameMonth = month(Date, label = TRUE),
    NameMonthShort = month(Date, label = TRUE),
    Week = week(Date),
    Year = year(Date),
    Quarter = quarter(Date, with_year = F, fiscal_start = 7))

我遇到的问题是,我无法添加未缩略的日期/月,也不确定是否可以在变体中添加月份_年份/季度_年份,以便将这些值考虑在内。是否有可能将这些值添加到其中,或者我是否必须以以前的方式添加它们?谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-02-21 23:28:26

通过将abbr=FALSE切换到month(),很容易添加长月份名称。

粘贴季度或几个月到几年需要第二次突变,如下所示。

由于粘贴创建字符向量而不是因素,因此需要手动指定因子级别:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
monthlevels = c(
                'Jan-2020','Feb-2020','Mar-2020','Apr-2020','May-2020','Jun-2020',
                'Jul-2020','Aug-2020','Sep-2020','Oct-2020','Nov-2020','Dec-2020',
                'Jan-2021','Feb-2021','Mar-2021','Apr-2021','May-2021','Jun-2021',
                'Jul-2021','Aug-2021','Sep-2021','Oct-2021','Nov-2021','Dec-2021')
                
quarterlevels = c('1-2020','2-2020','3-2020','4-2020','1-2021','2-2021','3-2021','4-2021')


Calendar %>%
  mutate(
    DateNo = day(Date),
    NameDay = wday(Date,label = TRUE),
    MonthNo = month(Date),
    NameMonth = month(Date, label = TRUE, abbr=FALSE), ## added abbr=FALSE
    NameMonthShort = month(Date, label = TRUE),
    Week = week(Date),
    Year = year(Date),
    Quarter = quarter(Date, with_year = F, fiscal_start = 7)) %>% 
    ## added second mutate() to paste fields created by the first mutate
    mutate(
    QuarterYear = factor(paste(Quarter, Year, sep='-'), levels=quarterlevels),
    MonthYear = factor(paste(NameMonthShort,Year,sep="-"),levels=monthlevels     
    ) %>% head()

返回:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        Date DateNo NameDay MonthNo NameMonth NameMonthShort Week Year Quarter
1 2020-01-01      1     Wed       1   January            Jan    1 2020       3
2 2020-01-02      2     Thu       1   January            Jan    1 2020       3
3 2020-01-03      3     Fri       1   January            Jan    1 2020       3
4 2020-01-04      4     Sat       1   January            Jan    1 2020       3
5 2020-01-05      5     Sun       1   January            Jan    1 2020       3
6 2020-01-06      6     Mon       1   January            Jan    1 2020       3
  QuarterYear MonthYear
1      3-2020  Jan-2020
2      3-2020  Jan-2020
3      3-2020  Jan-2020
4      3-2020  Jan-2020
5      3-2020  Jan-2020
6      3-2020  Jan-2020
票数 4
EN

Stack Overflow用户

发布于 2021-02-22 00:22:42

如果您使用内置的as.POSIXlt,而不需要lubridate,您可能会发现更容易。把它应用到你的序列上,你就会得到一个列表式的格式,

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Date <- as.POSIXlt(seq(as.Date("2020-01-01"), as.Date("2020-06-30"), by="7 days"))
## Note: shortened for sake of brevity

它已经将所需的信息存储在可以由$访问的对象中。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
attr(Date, "names")
# [1] "sec"   "min"   "hour"  "mday"  "mon"   "year"  "wday"  "yday"  "isdst"

由于存储格式,需要进行一些小的转换,还有一些助手函数,如weekdaysquartersstrftime。此外,我们还可以使用内置常数month.namemonth.abb

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Calendar <- data.frame(Date, 
                       DateNo=Date$mday,
                       NameDay=weekdays(Date),
                       MonthNo=Date$mon + 1,
                       NameMonth=month.name[Date$mon + 1],
                       NameMonthShort=month.abb[Date$mon + 1],
                       Week=strftime(Date, "%V"),
                       Year=1900 + Date$year,
                       Quarter=quarters(Date)
)

结果

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Calendar
#          Date DateNo   NameDay MonthNo NameMonth NameMonthShort Week Year Quarter
# 1  2020-01-01      1 Wednesday       1   January            Jan   01 2020      Q1
# 2  2020-01-08      8 Wednesday       1   January            Jan   02 2020      Q1
# 3  2020-01-15     15 Wednesday       1   January            Jan   03 2020      Q1
# 4  2020-01-22     22 Wednesday       1   January            Jan   04 2020      Q1
# 5  2020-01-29     29 Wednesday       1   January            Jan   05 2020      Q1
# 6  2020-02-05      5 Wednesday       2  February            Feb   06 2020      Q1
# 7  2020-02-12     12 Wednesday       2  February            Feb   07 2020      Q1
# 8  2020-02-19     19 Wednesday       2  February            Feb   08 2020      Q1
# 9  2020-02-26     26 Wednesday       2  February            Feb   09 2020      Q1
# 10 2020-03-04      4 Wednesday       3     March            Mar   10 2020      Q1
# 11 2020-03-11     11 Wednesday       3     March            Mar   11 2020      Q1
# 12 2020-03-18     18 Wednesday       3     March            Mar   12 2020      Q1
# 13 2020-03-25     25 Wednesday       3     March            Mar   13 2020      Q1
# 14 2020-04-01      1 Wednesday       4     April            Apr   14 2020      Q2
# 15 2020-04-08      8 Wednesday       4     April            Apr   15 2020      Q2
# 16 2020-04-15     15 Wednesday       4     April            Apr   16 2020      Q2
# 17 2020-04-22     22 Wednesday       4     April            Apr   17 2020      Q2
# 18 2020-04-29     29 Wednesday       4     April            Apr   18 2020      Q2
# 19 2020-05-06      6 Wednesday       5       May            May   19 2020      Q2
# 20 2020-05-13     13 Wednesday       5       May            May   20 2020      Q2
# 21 2020-05-20     20 Wednesday       5       May            May   21 2020      Q2
# 22 2020-05-27     27 Wednesday       5       May            May   22 2020      Q2
# 23 2020-06-03      3 Wednesday       6      June            Jun   23 2020      Q2
# 24 2020-06-10     10 Wednesday       6      June            Jun   24 2020      Q2
# 25 2020-06-17     17 Wednesday       6      June            Jun   25 2020      Q2
# 26 2020-06-24     24 Wednesday       6      June            Jun   26 2020      Q2
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66311302

复制
相关文章
比较字符串(忽略空格,忽略大小写)
总时间限制: 1000ms内存限制: 65536kB描述 判断两个由大小写字母和空格组成的字符串在忽略大小写,且忽略空格后是否相等。 输入两行,每行包含一个字符串。输出若两个字符串相等,输出YES,否则输出NO。样例输入 a A bb BB ccc CCC Aa BBbb CCCccc 样例输出 YES 源码如下: #include <iostream> using namespace std; bool compareTwoStringIgnoreCases(string a,string b); in
用户1631856
2018/04/12
3.2K0
16:忽略大小写的字符串比较
16:忽略大小写的字符串比较 总时间限制: 1000ms 内存限制: 65536kB描述 一般我们用strcmp可比较两个字符串的大小,比较方法为对两个字符串从前往后逐个字符相比较(按ASCII码值大小比较),直到出现不同的字符或遇到'\0'为止。如果全部字符都相同,则认为相同;如果出现不相同的字符,则以第一个不相同的字符的比较结果为准(注意:如果某个字符串遇到'\0'而另一个字符串还未遇到'\0',则前者小于后者)。但在有些时候,我们比较字符串的大小时,希望忽略字母的大小,例如"Hello"和"hell
attack
2018/04/03
1.7K0
忽略大小写比较字符串大小
一般我们用 strcmpstrcmp 可比较两个字符串的大小,比较方法为对两个字符串从前往后逐个字符相比较(按 ASCII 码值大小比较),直到出现不同的字符或遇到 \0 为止。
莫浅子
2022/11/18
1.2K0
python 字符串比较忽略大小写的方法
A.正则表达式,使用IGNORECASE标志 >>> import re >>> m = re.search('multi', 'A mUltiCased string', re.IGNORECASE) >>> bool(m) True B.在比较前把2个字符串转换成同样大写,用upper()方法,或小写,lower() >>> s = 'A mUltiCased string'.lower() >>> s 'a multicased string' >>> s.find('multi') 2
py3study
2020/01/14
8.3K0
python 字符串搜索替换(忽略大小写)
re.IGNORECASE text = 'UPPER PYTHON, lower python, Mixed Python' re.findall('python', text, flags=re.IGNORECASE) ['PYTHON', 'python', 'Python'] re.sub('python', 'snake', text, flags=re.IGNORECASE) 'UPPER snake, lower snake, Mixed snake'
用户5760343
2022/01/10
1K0
Swift4 获取String子字符串
都说Swift2和Swift3不是同一门语言,但是我怎么觉得Swift4有时看着也像别人家的孩子。。。。 这里主要是更新下以前的写的Swift3的String相关知识:
韦弦zhy
2018/09/11
6270
Swift 字符串和字符
Swift 字符串通过 String 类型来表示,也可以表示为 Character 类型值的集合。
Swift社区
2021/11/26
7930
Swift基础 字符串和字符
翻译自:https://docs.swift.org/swift-book/LanguageGuide/StringsAndCharacters.html
郭顺发
2023/07/17
1920
Swift基础 字符串和字符
go 生成随机字符串和获得定长字符串
挑战A.I.,赢百万奖金......了解更多详情>>> 随机字符串 //RandomStr 随机生成字符串 func RandomStr(length int) string { str := "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" bytes := []byte(str) result := []byte{} r := rand.New(rand.NewSource(time.Now().UnixNano
solate
2019/07/19
1.8K0
ToStringBuilder如何忽略null和空字符串
日常开发中,经常用org.apache.commons.lang3.builder.ToStringBuilder工具类来记录日志,比如:
菩提树下的杨过
2022/05/09
1.1K0
Swift教程(三)--字符串和字符
字符串是一系列的字符,比如说 “hello, world”或者 “likeyou”。Swift 的字符串用 String类型来表示。 String的内容可以通过各种方法来访问到,包括作为 Character值的集合。
roc
2019/07/31
6070
获得定长字符串
        C#中的字符串是Unicode编码,length是Unicode的Char的个数。所以,假如一个字符串中中英文混杂,又想获得一个固定宽度的字符串,就比较麻烦。单纯转换成字节再截取难免会碰到半个汉字的问题。         下面实现了这样的功能,返回固定字节长度的字符串,如果发生截断,后面补充2个或者3个“.”,根据截断点的位置决定。 /// <summary>         /// 返回定长的字符串,如果发生截取,在后面补充两个或三个"."         /// Author:jetz
用户1075292
2018/01/23
7880
Swift3 获取String子字符串Substring简单扩展
Swift3更新后不兼容Swift2了,刚开始看Swift,发现好多方法都不能用了啊,那就只能自己摸索了,同时也在这与大家分享分享,正好让大家帮我指正。
韦弦zhy
2018/09/11
6700
Python 字符串的大小写(一)
文章链接: https://icodeq.com/2021/6a332b281b55/
Zkeq
2022/05/18
5770
Swift3.0 for 循环和遍历字符串
未经允许不得转载:RffanLAB|Rffan实验室 » Swift3.0 for 循环和遍历字符串
用户2353021
2020/05/09
9010
[译]Swift中的空字符串
Swift 一个特色就是有很多的语法糖,初学可能觉得hold不住,实际用的时候倒是挺便利。
小刀c
2022/08/16
9800
Python字符串的大小写(二)
文章链接: https://icodeq.com/2021/28d6866714c1/
Zkeq
2022/05/18
5960
字符串——459. 重复的子字符串
示例 1: 输入: s = “abab” 输出: true 解释: 可由子串 “ab” 重复两次构成。
向着百万年薪努力的小赵
2022/12/02
1.4K0
字符串中查找子串_cstring查找子字符串
假设要从主串 s = “goodgoogle” 中找到 t = “google” 子串。根据我们的思考逻辑,则有:
全栈程序员站长
2022/09/24
3K0
字符串中查找子串_cstring查找子字符串
Java 字符串大小写转化
str.toLowerCase() 将String转换为小写,如果字符串中没有应该被转换的字符,返回原字符串
桑鱼
2020/04/24
1.2K0
Java 字符串大小写转化

相似问题

如何在Nextjs中设置背景图像?

214

如何在白色背景上显示Libgdx粒子效果?

11

粒子设计器设置背景图像

10

OpenglES混合粒子而不是背景粒子

30

如何将粒子-js设置为背景?

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文