R 如何将列名转换为更好的年份和月份格式

Sam*_*Sam 4 r date lubridate

我有一个数据框,其中一些列的列名称为年份和月份。

ID <- c(1, 3, 9L, 21L, 15L)
names <- c("as", "ds", "sds", "www", "jgh")
`201401` <- c("12L", "310L", "2379L", "234L", "14L")
`201402` <- c("12L", "310L", "2379L", "234L", "14L")
`201403` <- c("12L", "310L", "2379L", "234L", "14L")
`201404` <- c("12L", "310L", "2379L", "234L", "14L")
Run Code Online (Sandbox Code Playgroud)

我想将年月列名称转换为日期格式,以便诸如201401变为Jan 2014等列。

df <- data.frame(ID, names, `201401`, `201402`, `201403`, `201404`, check.names = FALSE)

betterDate <-  as.Date(df$201401,"%m/%y")  #possible solution ?


Run Code Online (Sandbox Code Playgroud)

获得以下结果的最佳方法是什么?

预期结果 df 列名称为:

ID =c(1, 3, 9L, 21L, 15L)
names = c("as","ds" ,"sds" ,"www", "jgh")
Jan 2014 = c('12L', '310L','2379L', '234L', '14L')
Feb 2014 =c('12L', '310L','2379L', '234L', '14L')
Mar 2014 =c('12L', '310L','2379L', '234L', '14L')
April 2014 =c('12L', '310L','2379L', '234L', '14L')
Run Code Online (Sandbox Code Playgroud)

Sam*_*amR 6

我从您的标签中假设这是您将在网页中呈现的表格。我希望如此,因为在 R 中使用这样的名称并不理想。在任何情况下,您都可以将名称转换为日期,然后根据需要设置它们的格式:

names_to_exclude  <- c("ID", "names")
names_to_change <- names(df)[!names(df) %in% names_to_exclude]
new_names  <- format(
    as.Date(sprintf("%s01", names_to_change), format = "%Y%m%d"),
    "%b %Y"
)

setNames(df, c(names_to_exclude, new_names))
#   ID names Jan 2014 Feb 2014 Mar 2014 Apr 2014
# 1  1    as      12L      12L      12L      12L
# 2  3    ds     310L     310L     310L     310L
# 3  9   sds    2379L    2379L    2379L    2379L
# 4 21   www     234L     234L     234L     234L
# 5 15   jgh      14L      14L      14L      14L
Run Code Online (Sandbox Code Playgroud)

  • @Sam(不是 SamR),意识到我认为你所说的标签应该表明你将其部署到仪表板已被删除,这是有充分理由的。[tag:rstudio] 是不合适的,因为该标签适用于有关 IDE 本身的问题,而不是有关语言的问题,并且其信息明确表示不要将该标签用于 R 问题。[tag:shinyapps] 用于解决问题*“关于 RStudio 的shinyapps.io”*,这是关于在那里部署和运行闪亮应用程序的问题,*“不能用于有关 Shiny 的一般问题”* ...甚至 [tag:shiny ] 对于没有闪亮代码的问题来说不是一个合适的标签。 (3认同)

Tho*_*ing 6

您可以使用ym+format

library(lubridate)
names(df)[-(1:2)] <- format(ym(names(df[-(1:2)])), "%b %Y")
Run Code Online (Sandbox Code Playgroud)

你将获得

> df
  ID names Jan 2014 Feb 2014 Mar 2014 Apr 2014
1  1    as      12L      12L      12L      12L
2  3    ds     310L     310L     310L     310L
3  9   sds    2379L    2379L    2379L    2379L
4 21   www     234L     234L     234L     234L
5 15   jgh      14L      14L      14L      14L
Run Code Online (Sandbox Code Playgroud)