Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/64.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
计算R(或其他)中的数据梯度_R - Fatal编程技术网

计算R(或其他)中的数据梯度

计算R(或其他)中的数据梯度,r,R,我有在32赫兹下30分钟内的温度数据。 我想计算一下当地的温度变化率。很抱歉,我不知道如何制作一个合适的可复制数据集。它需要一个向量时间,32个点的值相同,然后增加1秒 P1_test<- data.frame( Time = sample(1:32:1), Temperature = rnorm(32) ) ycs.prime <- diff(P1_test$Temperature)/diff(P1_test$Time) pred.

我有在32赫兹下30分钟内的温度数据。 我想计算一下当地的温度变化率。很抱歉,我不知道如何制作一个合适的可复制数据集。它需要一个向量时间,32个点的值相同,然后增加1秒

   P1_test<- data.frame(
        Time = sample(1:32:1),
        Temperature = rnorm(32)
    )
 ycs.prime <- diff(P1_test$Temperature)/diff(P1_test$Time)
 pred.prime <- predict(spl, deriv=1)

P1_test正如Gregor所指出的,如果你想了解温度是如何随时间变化的,你需要对时间变量进行更精细的表示。有两种解决办法。最好的选择是如果您的数据是按照记录的顺序排序的(因此第一行是第一次测量,第二行是第二次测量,等等),则使用排序信息生成时间变量的更详细版本:

> # there are 1800 seconds in 30 minutes, 32 measurements per second
> Seconds <- as.numeric(gl(n=1800, k=32, labels=1:1800))
> Temp <- rnorm(57600)
> df <- data.frame(Seconds, Temp)
> head(df) # the first 6 rows
  Seconds       Temp
1       1 -0.9543326
2       1  0.1973152
3       1 -0.4815007
4       1 -0.2494005
5       1  0.7282253
6       1 -1.0690358
> tail(df) # the last 6 rows
      Seconds         Temp
57595    1800 -0.708576762
57596    1800  2.660348850
57597    1800 -0.003186668
57598    1800  0.025776665
57599    1800 -1.627054312
57600    1800  0.241060762
> 
> ycs.prime <- diff(df$Temp)/diff(df$Seconds) # doesn't work properly
> 
> head(ycs.prime, 35) # first 35 elements
 [1]        Inf       -Inf        Inf        Inf       -Inf       -Inf        Inf       -Inf
 [9]       -Inf        Inf       -Inf        Inf       -Inf       -Inf        Inf       -Inf
[17]       -Inf        Inf        Inf        Inf       -Inf        Inf       -Inf        Inf
[25]       -Inf       -Inf        Inf       -Inf        Inf        Inf       -Inf -0.2423703
[33]        Inf        Inf       -Inf
>
#30分钟内有1800秒,每秒32次测量
>秒温度df头(df)#前6行
秒温度
1       1 -0.9543326
2       1  0.1973152
3       1 -0.4815007
4       1 -0.2494005
5       1  0.7282253
6       1 -1.0690358
>尾部(df)#最后6行
秒温度
57595    1800 -0.708576762
57596    1800  2.660348850
57597    1800 -0.003186668
57598    1800  0.025776665
57599    1800 -1.627054312
57600    1800  0.241060762
> 
>ycs.prime df nrow(df)#每秒一行
[1] 1800
> 
>ycs.prime图(ycs.prime,type=“l”)

我强烈建议制作一个可复制的示例。如果你知道你的数据是32Hz,但记录的时间被四舍五入到最接近的秒(或下限?),我建议你(a)将同时在一起的时间平均,或者(b)(如果它们的顺序正确,并且你知道测量值可靠地在32Hz),编辑数据以增加精度。谢谢。我无法计算出如何使数据符合此示例,请接受我的道歉。不过我明白你的建议。测量值绝对是32Hz。通过编辑数据来增加精度是什么意思?如果您有时间
1,1,1,1,1
0
添加到第一个时间,
1/32
添加到下一个时间,
2/32
添加到下一个时间,依此类推,这样您就有了真实的时间,而不是一些舍入的时间。就适合这个例子的数据而言,
dput(head(您的_数据,40))
可能就可以了。如果您有导致输出过长的因素,请在
dput中放置
droplevels()
。spl来自何处?写得不错!很多细节:)谢谢!这些都是你的评论中的建议,但我认为用例子来说明可能会解决OP的问题。非常感谢@RoseHartman!我真的很感谢你在细节和图表上的努力。你认为把温度数据通过某种过滤器来消除“错误的”突发峰值值得吗?E、 为了让它顺利一点。。。正在测量的是皮肤温度,所以真的不应该有任何尖峰。@HCAI,很高兴我能帮忙!您现在谈论的是异常值删除,这是一个完全不同的问题。关于如何进行这项工作,有很多很好的指导方针,包括像您这样的密集抽样重复测量(例如,查看EEG数据处理,例如)。@RoseHartman啊,谢谢您的链接!事实上,皮肤温度。测量实际上与脑电图同时进行。所以它一定会派上用场的!
> df$Time <- 1:nrow(df)
> 
> head(df)
  Seconds       Temp Time
1       1 -0.9543326    1
2       1  0.1973152    2
3       1 -0.4815007    3
4       1 -0.2494005    4
5       1  0.7282253    5
6       1 -1.0690358    6
> tail(df)
      Seconds         Temp  Time
57595    1800 -0.708576762 57595
57596    1800  2.660348850 57596
57597    1800 -0.003186668 57597
57598    1800  0.025776665 57598
57599    1800 -1.627054312 57599
57600    1800  0.241060762 57600
> 
> ycs.prime <- diff(df$Temp)/diff(df$Time)
> plot(ycs.prime, type = "l") 
> df$Time <- df$Time/32 # now it's in seconds
> # again, same initial data frame
> Seconds <- as.numeric(gl(n=1800, k=32, labels=1:1800))
> Temp <- rnorm(57600)
> df <- data.frame(Seconds, Temp)
> 
> # average Temp for each Second
> df$Temp <- ave(df$Temp, df$Seconds, FUN = mean)
> head(df) # note it's the same for the whole first second
  Seconds      Temp
1       1 0.1811943
2       1 0.1811943
3       1 0.1811943
4       1 0.1811943
5       1 0.1811943
6       1 0.1811943
> df <- unique(df) # drop repeated rows
> nrow(df) # one row per second
[1] 1800
> 
> ycs.prime <- diff(df$Temp)/diff(df$Seconds)
> plot(ycs.prime, type = "l")