【发布时间】:2014-06-05 19:59:41
【问题描述】:
我在将因子转换为日期时遇到了问题;它正在产生我不想要的 NA 值。
我的问题的数据可以在这里找到:(https://d396qusza40orc.cloudfront.net/repdata%2Fdata%2Factivity.zip)
x <- read.csv("activity.csv")
head(x)
steps date interval
1 NA 2012-10-01 0
2 NA 2012-10-01 5
3 NA 2012-10-01 10
4 NA 2012-10-01 15
5 NA 2012-10-01 20
6 NA 2012-10-01 25
目标:我试图找出每天平均总步数。所以首先,我需要对值进行分类,以便每个数据点对应于给定日期的总和
x$Day <- as.Date(cut(x$date, breaks = "day"))
Error in cut.default(x$date, breaks = "day") : 'x' must be numeric
只需用 class 函数确认这一点
class(x[,2])
“因素”
这很奇怪,因为从上面的 head(x) 看,它看起来像是 Date。无论如何,为了使用 cut 函数对值进行分类,以便每个数据点对应于给定日期的总和,我需要将日期更改为“日期”类
x[,2] <- as.Date(x[,2], format="%Y/%m/%d")
class(x[,2])
[1]“日期”
好的,所以理论上我现在应该能够对值进行分箱
x$Day <- as.Date(cut(x$date, breaks = "day"))
seq.int(0, to0 - from, by) 中的错误:'to' 不能是 NA、NaN 或无穷大 另外:警告信息: 1: 在 min.default(c(NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, : min 没有不可缺少的参数;返回 Inf 2: 在 max.default(c(NA_real_, NA_real_, NA_real_, NA_real_, NA_real_, : max 没有非缺失参数;返回 -Inf
head(is.na(x))
steps date interval
[1,] TRUE TRUE FALSE
[2,] TRUE TRUE FALSE
[3,] TRUE TRUE FALSE
[4,] TRUE TRUE FALSE
[5,] TRUE TRUE FALSE
[6,] TRUE TRUE FALSE
如果我将此与我在x[,2] <- as.Date(x[,2], format="%Y/%m/%d") 之前看到的内容进行比较
head(is.na(x))
steps date interval
[1,] TRUE FALSE FALSE
[2,] TRUE FALSE FALSE
[3,] TRUE FALSE FALSE
[4,] TRUE FALSE FALSE
[5,] TRUE FALSE FALSE
[6,] TRUE FALSE FALSE
不确定这里发生了什么?我知道这应该可行,因为我从以下教程 (http://blog.mollietaylor.com/2013/08/plot-weekly-or-monthly-totals-in-r.html?m=1) 中得到了这个想法
sessionInfo()
R version 3.0.3 (2014-03-06)
Platform: x86_64-w64-mingw32/x64 (64-bit)
locale:
[1] LC_COLLATE=English_Canada.1252
[2] LC_CTYPE=English_Canada.1252
[3] LC_MONETARY=English_Canada.1252
[4] LC_NUMERIC=C
[5] LC_TIME=English_Canada.1252
attached base packages:
[1] stats graphics grDevices utils
[5] datasets methods base
other attached packages:
[1] scales_0.2.4 ggplot2_1.0.0
loaded via a namespace (and not attached):
[1] colorspace_1.2-4 digest_0.6.4
[3] grid_3.0.3 gtable_0.1.2
[5] MASS_7.3-29 munsell_0.4.2
[7] plyr_1.8.1 proto_0.3-10
[9] Rcpp_0.11.1 reshape2_1.4
[11] stringr_0.6.2 tools_3.0.3
【问题讨论】:
-
你应该设置正确的格式分隔符“-”而不是“\”来获得:
as.Date(x[,2], format="%Y-%m-%d") -
这一切对我来说似乎很困惑。如果您拥有的是日期,而不是日期时间,并且您需要按天汇总,那为什么还需要使用
cut呢?数据已经达到您想要的粒度。然后您遇到了 agstudy 提到的格式问题,以及cut总是返回一个间隔因子的事实,因此将其结果强制回溯是没有意义的。