在 R 中使用 As.date 时如何删除自动设置的年份?

问题描述

我一直在努力在 R 中使用日期。我必须使用 as.Date 设置它,但是即使我没有指定它,我也会自动获取当前年份。如何从日期中删除年份?

xy <- matrix(c("09/08","10/14","10/06","05/11","02/23","10/27","08/04","11/29","07/23","12/17"),byrow=TRUE)

names <- matrix(c("G","C","R","OB","S","B","Ms","Mi","Ma","A"),byrow=T)

然后我做 cbind,给一些名字并将它变成一个 df

names_birthday <- cbind(names,xy)
colnames(names_birthday) <- c("Name","Date")
names_birthday <- as.data.frame(names_birthday)

但是当使用 as.Date 并指定我使用的是月份和日期时,我不知从哪里得到了一个“2021”:

 names_birthday <- names_birthday %>%
 group_by(Name) %>%
 mutate(Date=as.Date(Date,format = "%m/%d")) %>%
 arrange(Date)

 names_birthday

  # A tibble: 10 x 2
  # Groups:   Name [10]
     Name  Date      
     <chr> <date>    
   1 S     2021-02-23
   2 OB    2021-05-11
   3 Ma    2021-07-23
   4 Ms    2021-08-04
   5 G     2021-09-08
   6 R     2021-10-06
   7 C     2021-10-14
   8 B     2021-10-27
   9 Mi    2021-11-29
  10 A     2021-12-17

有什么想法吗?

解决方法

过年怎么了?如果您想打印一个可爱的生日列表,只需在格式化日期时省略年份(请参阅 format)。

我会添加一些评论,因为您正在采取很多额外的步骤来做简单的事情。首先,在创建日期和名称时的问题中,您创建了一个简单的向量(使用 c然后将其包装成矩阵(在这种情况下为列矩阵)。我假设是因为您想使用 cbind。但是 cbind 也接受向量作为列加入。

这是创建矩阵的简短版本:

xy <- c("09/08","10/14","10/06","05/11","02/23","10/27","08/04","11/29","07/23","12/17")
names <- c("G","C","R","OB","S","B","Ms","Mi","Ma","A")
cbind(Name=names,Date=xy)

这种方法的问题在于,如果您组合了几种不同的数据类型,例如字符和数字。生成的 matrix 一次只能包含 1 数据类型 - 如果任何列是字符向量,所有内容 都会缩减为字符。无需再对保存为字符的值进行数学运算。

第二步是转换为 data.frame。但是你可以直接创建 data.frame :

data.frame(Name=names,Date=xy)

如果您的目标是按排序,则您完全不必将它们转换为日期,因为您已经有了以月开头的格式。