R中的数据帧变换,根据参数进行归一化

时间:2015-10-12 20:57:32

标签: r

我不确定标题是否清楚,抱歉。

我有一个数据框:

         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。

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))