Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将因子时间变量转换为yearmon变量_R_Ggplot2_Zoo - Fatal编程技术网

将因子时间变量转换为yearmon变量

将因子时间变量转换为yearmon变量,r,ggplot2,zoo,R,Ggplot2,Zoo,我有一个数据框,如下所示 head(elnino) YEAR..MONTH NINO.3 NINO.3.4 rainfall 1 1950 Jan -1.28 -1.34 5.8 2 1950 Feb -1.10 -1.25 17.8 3 1950 Mar -0.92 -1.16 22.4 4 1950 Apr -0.7

我有一个数据框,如下所示

head(elnino)
YEAR..MONTH         NINO.3      NINO.3.4    rainfall
1  1950   Jan       -1.28         -1.34      5.8
2  1950   Feb       -1.10         -1.25     17.8
3  1950   Mar       -0.92         -1.16     22.4
4  1950   Apr       -0.75         -1.01      8.0
5  1950   May       -0.47         -0.75     44.0
6  1950   Jun       -0.49         -0.74    146.8
dput(head(elnino))
structure(list(YEAR..MONTH = c("1950   Jan", "1950   Feb", "1950   Mar", 
"1950   Apr", "1950   May", "1950   Jun"), NINO.3.ANOM = c(-1.28, 
-1.1, -0.92, -0.75, -0.47, -0.49), NINO.3.4.ANOM = c(-1.34, -1.25, 
-1.16, -1.01, -0.75, -0.74), rainfall = c(5.8, 17.8, 22.4, 8, 
44, 146.8)), .Names = c("YEAR..MONTH", "NINO.3.ANOM", "NINO.3.4.ANOM", 
"rainfall"), row.names = c(NA, 6L), class = "data.frame")
qplot(YEAR..MONTH,rainfall,data = elnino,geom="line")
Don't know how to automatically pick scale for object of type yearmon. Defaulting to continuous
Error: Discrete value supplied to continuous scale
现在第一列,即年、月是班级因素。 我想把它改成一年一班。但我得到了如下所示的NA

as.yearmon(elnino[,1], "%Y-%m")
NA
此外,ggplot在绘图时不支持yearmon类

因此,有人能告诉我如何处理这种类型的日期吗

数据如下:

head(elnino)
YEAR..MONTH         NINO.3      NINO.3.4    rainfall
1  1950   Jan       -1.28         -1.34      5.8
2  1950   Feb       -1.10         -1.25     17.8
3  1950   Mar       -0.92         -1.16     22.4
4  1950   Apr       -0.75         -1.01      8.0
5  1950   May       -0.47         -0.75     44.0
6  1950   Jun       -0.49         -0.74    146.8
dput(head(elnino))
structure(list(YEAR..MONTH = c("1950   Jan", "1950   Feb", "1950   Mar", 
"1950   Apr", "1950   May", "1950   Jun"), NINO.3.ANOM = c(-1.28, 
-1.1, -0.92, -0.75, -0.47, -0.49), NINO.3.4.ANOM = c(-1.34, -1.25, 
-1.16, -1.01, -0.75, -0.74), rainfall = c(5.8, 17.8, 22.4, 8, 
44, 146.8)), .Names = c("YEAR..MONTH", "NINO.3.ANOM", "NINO.3.4.ANOM", 
"rainfall"), row.names = c(NA, 6L), class = "data.frame")
qplot(YEAR..MONTH,rainfall,data = elnino,geom="line")
Don't know how to automatically pick scale for object of type yearmon. Defaulting to continuous
Error: Discrete value supplied to continuous scale
此外,我在使用ggplot绘制yearmon类对象时得到的错误如下所示

head(elnino)
YEAR..MONTH         NINO.3      NINO.3.4    rainfall
1  1950   Jan       -1.28         -1.34      5.8
2  1950   Feb       -1.10         -1.25     17.8
3  1950   Mar       -0.92         -1.16     22.4
4  1950   Apr       -0.75         -1.01      8.0
5  1950   May       -0.47         -0.75     44.0
6  1950   Jun       -0.49         -0.74    146.8
dput(head(elnino))
structure(list(YEAR..MONTH = c("1950   Jan", "1950   Feb", "1950   Mar", 
"1950   Apr", "1950   May", "1950   Jun"), NINO.3.ANOM = c(-1.28, 
-1.1, -0.92, -0.75, -0.47, -0.49), NINO.3.4.ANOM = c(-1.34, -1.25, 
-1.16, -1.01, -0.75, -0.74), rainfall = c(5.8, 17.8, 22.4, 8, 
44, 146.8)), .Names = c("YEAR..MONTH", "NINO.3.ANOM", "NINO.3.4.ANOM", 
"rainfall"), row.names = c(NA, 6L), class = "data.frame")
qplot(YEAR..MONTH,rainfall,data = elnino,geom="line")
Don't know how to automatically pick scale for object of type yearmon. Defaulting to continuous
Error: Discrete value supplied to continuous scale

正如预测的那样,提供给As.yearmon的格式与您的数据不匹配。它在年和月之间有三个空格,以缩写形式给出,而不是数字。这应该起作用:

as.yearmon(as.character(elnino[,1]), "%Y   %b")

对于密谋,你有理由使用yearmon吗?为什么不能使用更常见的日期格式,或者根据需要继续将值视为因素。

一个简单的替代方法是只使用日期类设置为月的第一个,而不是zoo::yearmon:

elnino$month <- as.Date(paste(elnino$YEAR..MONTH, '01'), '%Y %b %d')

qplot(month, rainfall, data = elnino, geom = "line")

请将dputheadelnino的输出粘贴到您的问题中,而不是您提供的数据样本,这样我们将获得与您的实际数据结构完全相同的数据样本。另外,请显示与您的问题相关的所有代码,包括ggplot代码和您收到的任何错误消息。立即的答案是,您传递给as.yearmon的格式似乎与data.frame中的格式不匹配。然而,如果没有实际数据,就很难做到这一点。如果不知道您要绘制什么,我无法建议一种有用的解决方法/方法。请尝试使用.yearMonelIno[,1],%Y%b%b表示缩写月份,您的列的格式看起来是年、三个空格、缩写月份。引号中的那个位指的是您正在转换的数据当前所采用的格式,而不是您希望它在转换后的样子。@Austin,非常感谢您的工作。但qplot在绘图时仍然不支持yearmon类。我该如何解决这个问题?对于绘图,可以使用scale_x_yearmon。