【问题标题】:How to change the date format in my data frame using R如何使用 R 更改我的数据框中的日期格式
【发布时间】:2015-10-14 04:24:42
【问题描述】:

我想在 R 中绘制 n(y 轴)与日期(x 轴)的图表,但由于我的数据中显示的日期格式,日期的顺序不正确升序。我该如何解决这个问题?感谢您的帮助。

hybrid <- readWorksheetFromFile(excel.file, sheet="ResultSet", header=TRUE)
wb <- loadWorkbook(excel.file)
setMissingValue(wb,value=c("NA"))
hybrid1 <- readWorksheet(wb, sheet="ResultSet", header=TRUE)

我使用了 dplyr 函数。假设每个 Pub.Number 都有一个唯一的代码,我将其替换为一个。然后,我统计了某个日期的数量。

hybrid <- mutate(hybrid1, n=sum(Publication.Number=1))
p1 <- select(hybrid1, Publication.Date, n)
pt <- count(p1, Publication.Date, wt=n)

输出如下所示:

pt
Source: local data frame [627 x 2]

   Publication.Date     n
              (chr) (dbl)
1        01.01.2013     1
2        01.01.2014     8
3        01.01.2015    10
4        01.02.2012     3
5        01.03.2012    16
6        01.04.2015     2
7        01.05.2012     1
8        01.05.2013     7
9        01.05.2014    23
10       01.06.2011     1
..              ...   ...

然后,我绘制了它,但 R 将 Pub.Date 识别为字符

qplot(x=Publication.Date, y=n, data=pt, geom="point")

x <- hybrid1[,2]
class(x)
[1] "character"

The graph I've plotted is a mess because of the wrong order of the date

我尝试使用 as.Date 函数,但它似乎不完整(我使用的是 R 版本 3.2.2)

> pt[,1] <- as.Date(pt[,1], format='%d.%m.%Y’)
+

【问题讨论】:

  • 您想检查如何创建日期对象(例如 as.Date())。这是给你的link。您可能需要考虑使用scale_x_date()。信息是here

标签: r date graph ggplot2 format


【解决方案1】:

在使用 R 进行数据输入的通常过程中,“01.01.2013”​​之类的值将成为因子变量。由于它们不是两种“标准日期格式”之一:YYYY/MM/DD 或 YYYY-MM-DD,除非您构建“as.DT”方法,否则它们不能直接作为“日期”与“colClasses”一起输入.您需要通过在读取函数中使用stringsAsFactors=FALSE 或在输入后使用as.character 强制转换为字符来确保它们是字符向量。您显示的标题让我认为这些数据已经以某种方式被操纵,可能有 dplyr 包中的功能?

res <- structure(list(Publication.Date = structure(1:10, .Label = c("01.01.2013", 
 "01.01.2014", "01.01.2015", "01.02.2012", "01.03.2012", "01.04.2015", 
 "01.05.2012", "01.05.2013", "01.05.2014", "01.06.2011"), class = "factor"), 
     n = c(1L, 8L, 10L, 3L, 16L, 2L, 1L, 7L, 23L, 1L)), .Names = c("Publication.Date", 
 "n"), class = "data.frame", row.names = c("1", "2", "3", "4", 
 "5", "6", "7", "8", "9", "10"))

> res
   Publication.Date  n
1        01.01.2013  1
2        01.01.2014  8
3        01.01.2015 10
4        01.02.2012  3
5        01.03.2012 16
6        01.04.2015  2
7        01.05.2012  1
8        01.05.2013  7
9        01.05.2014 23
10       01.06.2011  1

> res$Publication.Date <- as.Date( as.character(res$Publication.Date), format="%m.%d.%Y")

然后你可以绘制:

png();  qplot(x=Publication.Date, y=n, data=res, geom="point"); dev.off()

【讨论】:

  • 是的,我使用 dplyr & R 将 Pub.Date 识别为字符。我尝试使用您的方式,但 Pub.Date 的整个专栏都转向了 NA。我还是 R 的初学者,感谢您的帮助~
  • “我的方式”没有使用由 dplyr-functions 创建的对象,“你的方式”仍然是一个完全的谜,因为您没有发布任何代码显示创建 NA 的代码。如果您需要特定帮助,您应该编辑您的问题以在您的对象和代码中包含来自 dput 的输出。
  • 我添加了我使用的 dplyr-functions 的代码,希望它会有所帮助。感谢您迄今为止的帮助。
  • “不完整”是完全正确的。当我看到format='%d.%m.%Y’ 时,我注意到结束引号不是“直单引号”,而是“弯引号”。我认为您应该停止使用 MS-Word 作为您的编辑器。
  • 我想我已经知道问题所在了。感谢您到目前为止的所有帮助,您的回答非常有帮助〜非常感谢。
【解决方案2】:

先将 'Publication.Date' 转换为 Date 格式,然后排序:

使用您的数据:

data <- read.table(pipe('pbpaste'),sep='',header=T,stringsAsFactors = F)
  data <- data[,-1]
  names(data) <- c('Pub.Date', 'n’)

    Pub.Date  n
1 01.01.2014  8
2 01.01.2015 10
3 01.02.2012  3
4 01.03.2012 16
5 01.04.2015  2
6 01.05.2012  1
7 01.05.2013  7
8 01.05.2014 23
9 01.06.2011  1

将“Pub.Date”转换为日期格式:

data[,1] <- as.Date(data[,1],format='%d.%m.%Y’)

和顺序:

data[order(data$"Pub.Date",data$n), ]

    Pub.Date  n
9 2011-06-01  1
3 2012-02-01  3
4 2012-03-01 16
6 2012-05-01  1
7 2013-05-01  7
1 2014-01-01  8
8 2014-05-01 23
2 2015-01-01 10
5 2015-04-01  2

【讨论】:

  • 我尝试使用 as.Date 函数,但似乎不完整。我在问题中添加了我的结果,请看一下。非常感谢您迄今为止的帮助。
  • @Juliet.Y,确切的错误信息是什么?您的语言环境设置是什么?使用“str”检查您的数据框,并确保在使用“as.Date”函数之前“Pub.Date”不是因子变量。
猜你喜欢
  • 2016-02-19
  • 2021-01-11
  • 1970-01-01
  • 2017-06-28
  • 1970-01-01
  • 2021-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多