Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/81.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_Dataframe - Fatal编程技术网

R 对行值逐个求和

R 对行值逐个求和,r,dataframe,R,Dataframe,我有一个数据帧,它描述了从1到120的每一秒,以及从0到8的每一个nodeId,从一个节点到上一个节点的距离(从nodeId 8到nodeId 7的距离,从7到6的距离,…,从1到0的距离)。基本上是这样的: time nodeId distance 1 1 0 0.000000 2 1 1 5.007664 3 1 2 5.001861 4 1 3 5.001778 5 1 4 5.00

我有一个数据帧,它描述了从1到120的每一秒,以及从0到8的每一个nodeId,从一个节点到上一个节点的距离(从nodeId 8到nodeId 7的距离,从7到6的距离,…,从1到0的距离)。基本上是这样的:

    time nodeId distance
1      1      0 0.000000
2      1      1 5.007664
3      1      2 5.001861
4      1      3 5.001778
5      1      4 5.001755
6      1      5 5.001719
7      1      6 5.001714
8      1      7 5.001647
9      1      8 5.001608
289    2      0 0.000000
290    2      1 5.026168
291    2      2 5.007968
292    2      3 5.007372
293    2      4 5.008111
294    2      5 5.009455
    time nodeId distance
1      1      0 0.000000
2      1      1 5.007664
3      1      2 10.00953
4      1      3 15.01131
5      1      4 20.01307
6      1      5 25.01479
7      1      6 30.01650
8      1      7 35.01815
9      1      8 40.01976
289    2      0 0.000000
290    2      1 5.026168
291    2      2 10.03414
我想更改“距离”列,以便它告诉我每一个节点ID和每一秒与节点ID 0的距离。
因此,例如,时间==1上nodeId==2的距离应该是nodeId==2加上nodeId==1的距离(其中时间==1),然后我需要从这里开始将其他值与前面的值相加,例如
(nodeId==3应该是nodeId==3+nodeId==2)

我曾尝试使用for循环,但如果不使用大量ifs(基本上每个nodeId时间一个ifs),我无法计算出如何求和所需的值

此数据帧上的结果应如下所示:

    time nodeId distance
1      1      0 0.000000
2      1      1 5.007664
3      1      2 5.001861
4      1      3 5.001778
5      1      4 5.001755
6      1      5 5.001719
7      1      6 5.001714
8      1      7 5.001647
9      1      8 5.001608
289    2      0 0.000000
290    2      1 5.026168
291    2      2 5.007968
292    2      3 5.007372
293    2      4 5.008111
294    2      5 5.009455
    time nodeId distance
1      1      0 0.000000
2      1      1 5.007664
3      1      2 10.00953
4      1      3 15.01131
5      1      4 20.01307
6      1      5 25.01479
7      1      6 30.01650
8      1      7 35.01815
9      1      8 40.01976
289    2      0 0.000000
290    2      1 5.026168
291    2      2 10.03414

我想你只需要按时间分组-

在R底-

df$d2 <- with(df, ave(distance, time, FUN = cumsum))

    time nodeId distance        d2
1      1      0 0.000000  0.000000
2      1      1 5.007664  5.007664
3      1      2 5.001861 10.009525
4      1      3 5.001778 15.011303
5      1      4 5.001755 20.013058
6      1      5 5.001719 25.014777
7      1      6 5.001714 30.016491
8      1      7 5.001647 35.018138
9      1      8 5.001608 40.019746
289    2      0 0.000000  0.000000
290    2      1 5.026168  5.026168
291    2      2 5.007968 10.034136
292    2      3 5.007372 15.041508
293    2      4 5.008111 20.049619
294    2      5 5.009455 25.059074
带有
数据。表
-

setDT(df)[, d2 := cumsum(distance), by = time][]