将divinff应用于R中的不连续数据帧

时间:2014-07-21 15:17:27

标签: r dataframe subset

我有一组位置测量,我必须通过线性回归才能获得斜率值。

我先做一些子集,然后得到这个数据帧(显示子集)。

   us[1:30,1:5]
     estado Tiempo    UT    TR UT.CHX
3087      3  618.2 16561 15861  16313
3088      3  618.4 16561 15861  16313
3089      3  618.6 16561 15861  16313
3090      3  618.8 16561 15861  16313
3091      3  619.0 16561 15861  16313
3092      3  619.2 16561 15861  16313
3093      3  619.4 16561 15861  16313
3094      3  619.6 16561 15861  16313
3095      3  619.8 16561 15861  16313
3096      3  620.0 16561 15861  16313
3097      3  620.2 16561 15861  16313
3098      3  620.4 16561 15861  16313
3099      3  620.6 16561 15861  16313
3100      3  620.8 16561 15861  16313
3101      3  621.0 16561 15861  16313
3102      3  621.2 16561 15861  16313
3103      3  621.4 16561 15861  16313
3104      3  621.6 16561 15861  16313
3105      3  621.8 16561 15860  16313
3106      3  622.0 16561 15860  16313
3107      3  622.2 16561 15860  16313
3108      3  622.4 16561 15859  16313
3109      3  622.6 16561 15859  16313
3110      3  622.8 16561 15859  16313
3111      3  623.0 16561 15859  16313
3112      3  623.2 16561 15859  16312
3113      3  623.4 16561 15859  16310
3114      3  623.6 16561 15859  16309
3115      3  623.8 16561 15859  16308
3116      3  624.0 16561 15859  16307

我必须将每次开始的第一个值设置为零(您可以看到“Tiempo”列不连续,它以45行为一组跳转值)并将每个集合中的下一个值重新激活到该初始位置。其背后的想法是为每列获得一组递增值(随着位置的变化),并将其与“Tiempo”变量对应,以便稍后获得每列的斜率。

如果我使用

veltraining<-cbind(us$Tiempo,diffinv(abs(diff(as.matrix(us[,3:length(us)])))))

不连续的跳跃破坏了这项工作。

    veltraining[1:30,1:5]
       col1 col2 col3 col4 col5
 [1,] 618.2    0    0    0    0
 [2,] 618.4    0    0    0    0
 [3,] 618.6    0    0    0    0
 [4,] 618.8    0    0    0    0
 [5,] 619.0    0    0    0    0
 [6,] 619.2    0    0    0   10
 [7,] 619.4    0    0    0   19
 [8,] 619.6    0    0    0   25
 [9,] 619.8    0    0    0   33
[10,] 620.0    0    0    0   39
[11,] 620.2    0    0    0   42
[12,] 620.4    0    0    0   42
[13,] 620.6    0    0    0   42
[14,] 620.8    0    0    0   43
[15,] 621.0    0    0    0   44
[16,] 621.2    0    0    0   44
[17,] 621.4    0    0    0   45
[18,] 621.6    0    0    0   47
[19,] 621.8    0    1    0   49
[20,] 622.0    0    1    0   51
[21,] 622.2    0    1    0   53
[22,] 622.4    0    2    0   55
[23,] 622.6    0    2    0   56
[24,] 622.8    0    2    0   58
[25,] 623.0    0    2    0   58
[26,] 623.2    0    2    1   72
[27,] 623.4    0    2    3   80
[28,] 623.6    0    2    4   80
[29,] 623.8    0    2    5   83
[30,] 624.0    0    2    6   92

预期输出应该是这样的数据帧(子集)。不要介意列名,我只是在做完这篇文章之后给我们命名了,顺序是一样的。

primer[1:10,1:7]
   Tiempo UT TR UT.CHX TR.CHX TR.CHX.1 UT.CHX.1
1   618.2  0  0      0      0        0        0
2   618.4  0  0      0      0        0        0
3   618.6  0  0      0      0        0        0
4   618.8  0  0      0      0        0        0
5   619.0  0  0      0      0        9        0
6   619.2  0  0      0     10       14        0
7   619.4  0  0      0     19       15        0
8   619.6  0  0      0     25       18        0
9   619.8  0  0      0     33       39        0
10  620.0  0  0      0     39       64        0

我不知道如何简单地分割数据框 - 这意味着没有大量的子集,命名和类似的东西 - 我不知道“diffinv(abs(diff ...)策略是否是最好的。

谢谢

0 个答案:

没有答案