2016-02-05 70 views
2

我尝试使用各种平滑功能,但没有找到合适的我。 我从其中包含传感器数据和对每一行的日期时间戳的CSV文件读取数据帧:数据帧平滑功能

df 
#datetime value1 value2 value3 ... 
#2015-10-2 05-10-12 0.1 1000 28 ... 
#2015-10-2 05-10-14 0.21 2500 17 ... 
#2015-10-2 05-10-19 0.52 1700 37 ... 
#2015-10-2 05-11-01 0.31 1530 42 ... 
#2015-10-2 05-11-03 0.25 1956 33 ... 
#2015-10-2 05-11-10 0.63 2750 22 ... 
#2015-10-2 05-11-30 0.23 322 32 ... 
#2015-10-2 15-00-43 0.12 933 17 ... 
#2015-10-3 10-43-52 0.03 3244 43 ... 
#2015-10-3 12-11-45 0.73 2334 12 ... 
#2015-10-4 00-32-34 0.54 2321 27 ... 
... 

正如你所看到的datetime列没有固定的时间间隔。我认为这是一个问题。 现在我想平滑数据帧列值1。

好的,我的问题已被搁置,所以我想详细询问一下。 对不起,我是R(自几天以来)的新手,也是这个论坛的新手(自昨天起),所以我必须道歉,因为我的问题不够清楚,并且不知道每个格式化规则。但我会尽我所能参与进来!

我拿起一个例子来自https://stats.stackexchange.com/questions/30975/how-to-add-non-linear-trend-line-to-a-scatter-plot-in-r此页:

n <- 10 
x <-seq(n) 
y <- rnorm(n, 50 + 30 * x^(-0.2), 1) 
Data <- data.frame(x,y) 

plot(y ~ x, Data) 

loess_fit <- loess(y ~ x, Data) 
lines(Data$x, predict(loess_fit), col = "blue") 

nls_fit <- nls(y ~ a + b * x^(-c), Data, start = list(a = 80, b = 20, c = 0.2)) 
lines(Data$x, predict(nls_fit), col = "red") 

这个例子显示清楚如何平滑趋势线添加到该值显示。

现在我的问题是,我没有后续的数值作为x,但我有日期时间值。 所以我修改了上面的例子是:

x <- strptime(c("2015-10-02 11:07:43", "2015-10-02 12:09:45", "2015-10-02 15:10:10", "2015-10-02 18:00:23", 
"2015-10-02 22:31:12", "2015-10-03 02:01:53", "2015-10-03 02:05:52", "2015-10-03 04:12:37", 
"2015-10-03 07:47:08", "2015-10-03 11:43:41"), format = "%Y-%m-%d %H:%M:%S") 
Data <- data.frame(x,y) 

plot(y ~ x, Data) 

loess_fit <- loess(y ~ x, Data) 
lines(Data$x, predict(loess_fit), col = "blue") 

nls_fit <- nls(y ~ a + b * x^(-c), Data, start = list(a = 80, b = 20, c = 0.2)) 
lines(Data$x, predict(nls_fit), col = "red") 

如果我运行这个例子中,我得到一个错误在该行

loess_fit <- loess(y ~ x, Data) 

说:

Error in simpleLoess(y, x, w, span, degree = degree, parametric = parametric, : 
(converted from warning) NAs introduced by coercion 

任何暗示用于获取平滑的趋势也对这些数据?

+0

_“但是没有找到合适的人......”......你究竟是什么意思? – miradulo

+0

我发现了一些函数“黄土”,与随后的x值一起使用,而不是与datetimes – Juppes

+0

欢迎来到StackOverflow!请阅读关于[如何提出一个好问题](http://stackoverflow.com/help/how-to-ask)以及如何给出[可重现的示例]的信息(http://stackoverflow.com/questions/ 5963269 /如何对化妆一个伟大-R-重复性,例如/ 5963610)。这会让其他人更容易帮助你。 – Jaap

回答

1

help("loess")指定函数需要“数字响应和一到四个数字预测器”。一个POSIXlt变量不是一个数字变量。然而,这个工程:

loess_fit <- loess(y ~ as.numeric(x), Data) 
lines(Data$x, predict(loess_fit), col = "blue") 

PS:我通常建议,以避免POSIXlt和使用as.POSIXct代替strptime。您还应该始终明确指定时区。

+0

非常感谢这个提示!它工作完美。我也会记住你的提示;-)) – Juppes