在 R 中使用 As.date 时如何删除自动设置的年份?
How do I remove an automatically set year when using As.date in R?
我一直在努力使用 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 数据类型 - 如果任何列是字符向量,则 everything 是减少为字符。不再对保存为字符的值进行数学运算。
第二步是转换为 data.frame。但是您可以直接创建 data.frame:
data.frame(Name=names, Date=xy)
如果您的目标是排序依据,您完全不必将它们转换为日期,因为您已经有了以月份开头的格式。
我一直在努力使用 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 数据类型 - 如果任何列是字符向量,则 everything 是减少为字符。不再对保存为字符的值进行数学运算。
第二步是转换为 data.frame。但是您可以直接创建 data.frame:
data.frame(Name=names, Date=xy)
如果您的目标是排序依据,您完全不必将它们转换为日期,因为您已经有了以月份开头的格式。