我不确定标题是否清楚,抱歉。
我有一个数据框:
mesh procs ordering L1 L2 L3 Time 1 carabiner 1 ori 0.430610 0.49491 0.430610 6.154280 4 carabiner 2 ori 0.232120 0.63542 0.232120 3.168580 7 carabiner 4 ori 0.106630 0.61051 0.106630 0.549437 10 carabiner 8 ori 0.077175 0.64292 0.077175 0.284768 13 carabiner 16 ori 0.065619 0.65944 0.065619 0.161521 16 carabiner 24 ori 0.067526 0.70776 0.067526 0.113796 19 carabiner 32 ori 0.077073 0.68884 0.077073 0.109517 22 crake 1 ori 0.441070 0.47276 0.441070 5.621140 25 crake 2 ori 0.181260 0.51812 0.181260 2.219040 28 crake 4 ori 0.105680 0.45235 0.105680 0.507697 31 crake 8 ori 0.062938 0.71500 0.062938 0.279446 34 crake 16 ori 0.057988 0.84940 0.057988 0.169796 37 crake 24 ori 0.070777 0.57910 0.070777 0.124948 40 crake 32 ori 0.082224 0.71482 0.082224 0.107725 43 dialog 1 ori 0.561330 0.37291 0.561330 5.599430 46 dialog 2 ori 0.218940 0.49722 0.218940 2.432410 49 dialog 4 ori 0.126080 0.54000 0.126080 0.522720 52 dialog 8 ori 0.072740 0.66879 0.072740 0.320339 55 dialog 16 ori 0.070624 0.74442 0.070624 0.174091 58 dialog 24 ori 0.059578 0.70210 0.059578 0.132421 61 dialog 32 ori 0.080391 0.62270 0.080391 0.111252
我想添加一个名为speedup
的列,其中对于第x行,该列获取Tx / Time [x],其中Tx是具有相同网格值的行的Time
值在过程中比x和1。
答案 0 :(得分:3)
我愿意
library(data.table)
setDT(DF)[ , speedup := Time[procs==1]/Time, by=mesh]
导致
mesh procs ordering L1 L2 L3 Time speedup
1: carabiner 1 ori 0.430610 0.49491 0.430610 6.154280 1.000000
2: carabiner 2 ori 0.232120 0.63542 0.232120 3.168580 1.942283
3: carabiner 4 ori 0.106630 0.61051 0.106630 0.549437 11.201066
4: carabiner 8 ori 0.077175 0.64292 0.077175 0.284768 21.611557
5: carabiner 16 ori 0.065619 0.65944 0.065619 0.161521 38.102042
6: carabiner 24 ori 0.067526 0.70776 0.067526 0.113796 54.081690
7: carabiner 32 ori 0.077073 0.68884 0.077073 0.109517 56.194746
8: crake 1 ori 0.441070 0.47276 0.441070 5.621140 1.000000
9: crake 2 ori 0.181260 0.51812 0.181260 2.219040 2.533140
10: crake 4 ori 0.105680 0.45235 0.105680 0.507697 11.071840
11: crake 8 ori 0.062938 0.71500 0.062938 0.279446 20.115300
12: crake 16 ori 0.057988 0.84940 0.057988 0.169796 33.105256
13: crake 24 ori 0.070777 0.57910 0.070777 0.124948 44.987835
14: crake 32 ori 0.082224 0.71482 0.082224 0.107725 52.180460
15: dialog 1 ori 0.561330 0.37291 0.561330 5.599430 1.000000
16: dialog 2 ori 0.218940 0.49722 0.218940 2.432410 2.302009
17: dialog 4 ori 0.126080 0.54000 0.126080 0.522720 10.712102
18: dialog 8 ori 0.072740 0.66879 0.072740 0.320339 17.479701
19: dialog 16 ori 0.070624 0.74442 0.070624 0.174091 32.163811
20: dialog 24 ori 0.059578 0.70210 0.059578 0.132421 42.285061
21: dialog 32 ori 0.080391 0.62270 0.080391 0.111252 50.331050
mesh procs ordering L1 L2 L3 Time speedup
假设procs==1
始终是mesh
组中的第一行,这也有效:
DF$speedup <- with(DF, ave(Time, mesh, FUN = function(x) x[1]/x))