根据条件和组创建变量

时间:2019-11-25 02:13:31

标签: r

我的数据有一个小问题(见下文)。我想创建一个表示此计算的新列:名为percentage的新列,每个id power * 100 / max(power) BUT。 例如: id LM01-PRD-S1,在第1行,我们应该有22(表示25 * 100/115)。

感谢您的宝贵帮助!

数据

     time power    hr    fr    VE   VO2  VCO2 id         
  1 00:15    25    90    24    20   632   549 LM01-PRD-S1
  2 00:28    25    92    23    21   679   597 LM01-PRD-S1
  3 00:44    25    93    22    21   675   607 LM01-PRD-S1
  4 01:00    25    93    20    19   680   577 LM01-PRD-S1
  5 01:15    40    96    20    22   745   660 LM01-PRD-S1
  6 01:29    40    98    21    22   764   675 LM01-PRD-S1
  7 01:44    40   100    21    22   789   703 LM01-PRD-S1
  8 01:59    40   100    20    23   805   734 LM01-PRD-S1
  9 02:15    55   105    22    26   911   843 LM01-PRD-S1
 10 02:30    55   105    20    25   881   831 LM01-PRD-S1
 11 02:43    55   109    19    25   895   847 LM01-PRD-S1
 12 02:57    55   112    21    25   908   868 LM01-PRD-S1
 13 03:14    70   120    21    28   981   947 LM01-PRD-S1
 14 03:29    70   120    21    29  1044  1021 LM01-PRD-S1
 15 03:43    70   122    22    27  1066  1031 LM01-PRD-S1
 16 03:58    70   127    19    30  1136  1122 LM01-PRD-S1
 17 04:15    85   130    20    32  1181  1218 LM01-PRD-S1
 18 04:29    85   141    21    32  1194  1216 LM01-PRD-S1
 19 04:42    85   139    22    34  1231  1295 LM01-PRD-S1
 20 04:58    85   139    19    32  1193  1268 LM01-PRD-S1
 21 05:12   100   139    21    31  1192  1274 LM01-PRD-S1
 22 05:30   100   146    21    38  1363  1460 LM01-PRD-S1
 23 05:45   100   150    28    50  1551  1801 LM01-PRD-S1
 24 05:57   100   148    30    51  1499  1810 LM01-PRD-S1
 25 06:14   115   150    30    55  1564  1883 LM01-PRD-S1
 26 06:30   115   153    31    56  1544  1892 LM01-PRD-S1
 27 06:44   115   157    33    59  1545  2012 LM01-PRD-S1
 28 06:55   115   157    34    62  1647  2091 LM01-PRD-S1
 29 00:15    35   102    16    18   659   576 LB02-PRD-S1
 30 00:28    35   101    17    19   729   613 LB02-PRD-S1
 31 00:44    35   105    15    28   977   851 LB02-PRD-S1
 32 00:59    35    96    16    28   886   852 LB02-PRD-S1
 33 01:12    50    90    16    16   593   504 LB02-PRD-S1
 34 01:28    50   106    18    17   737   552 LB02-PRD-S1
 35 01:44    50   108    19    23  1053   775 LB02-PRD-S1
 36 01:59    50   117    17    30  1236  1008 LB02-PRD-S1
 37 02:13    65   113    18    29  1181   983 LB02-PRD-S1
 38 02:29    65   114    15    31  1167  1016 LB02-PRD-S1
 39 02:44    65   118    16    31  1167  1052 LB02-PRD-S1
 40 02:59    65   114    17    28  1104   967 LB02-PRD-S1
 41 03:13    80   120    17    35  1318  1172 LB02-PRD-S1
 42 03:29    80   117    16    32  1236  1153 LB02-PRD-S1
 43 03:43    80   122    17    31  1168  1094 LB02-PRD-S1
 44 03:57    80   122    17    34  1312  1205 LB02-PRD-S1
 45 04:14    95   126    18    37  1311  1274 LB02-PRD-S1
 46 04:28    95   129    18    35  1248  1201 LB02-PRD-S1
 47 04:44    95   131    15    33  1275  1196 LB02-PRD-S1
 48 04:57    95   134    18    39  1444  1381 LB02-PRD-S1
 49 05:13   110   134    19    43  1539  1472 LB02-PRD-S1
 50 05:29   110   136    19    41  1417  1406 LB02-PRD-S1
 51 05:44   110   137    20    43  1496  1437 LB02-PRD-S1
 52 06:00   110   139    20    44  1561  1539 LB02-PRD-S1
 53 06:14   125   142    21    46  1561  1560 LB02-PRD-S1
 54 06:28   125   146    21    46  1535  1552 LB02-PRD-S1
 55 06:44   125   148    23    51  1698  1703 LB02-PRD-S1
 56 07:00   125   150    23    53  1725  1776 LB02-PRD-S1
 57 07:13   140   151    22    52  1726  1760 LB02-PRD-S1
 58 07:29   140   151    23    53  1713  1763 LB02-PRD-S1
 59 07:44   140   153    25    55  1807  1836 LB02-PRD-S1
 60 07:59   140   155    26    58  1897  1941 LB02-PRD-S1
 61 08:15   155   153    26    59  1929  1963 LB02-PRD-S1
 62 08:29   155   157    26    57  1843  1908 LB02-PRD-S1
 63 08:44   155   160    28    65  1942  2065 LB02-PRD-S1
 64 09:00   155   164    26    64  2011  2131 LB02-PRD-S1
 65 09:14   170   166    26    65  2048  2178 LB02-PRD-S1
 66 09:30   170   166    26    64  2069  2171 LB02-PRD-S1
 67 09:45   170   169    25    64  2165  2269 LB02-PRD-S1
 68 10:00   170   169    28    76  2328  2539 LB02-PRD-S1
 69 10:14   185   169    30    76  2189  2449 LB02-PRD-S1
 70 10:29   185   171    29    73  2225  2411 LB02-PRD-S1
 71 10:44   185   171    29    68  2170  2292 LB02-PRD-S1
 72 10:59   185   171    31    82  2458  2712 LB02-PRD-S1
 73 11:14   200   171    33    89  2443  2780 LB02-PRD-S1
 74 11:29   200   173    33    87  2465  2784 LB02-PRD-S1
 75 11:44   200   176    32    88  2536  2853 LB02-PRD-S1
 76 12:00   200   176    34    93  2571  2899 LB02-PRD-S1
 77 12:15   215   176    36    98  2529  2924 LB02-PRD-S1
 78 12:30   215   179    36   105  2602  3087 LB02-PRD-S1
 79 12:45   215   179    39   111  2795  3282 LB02-PRD-S1
 80 12:59   215   181    40   118  2679  3240 LB02-PRD-S1
 81 13:15   230   179    40   113  2649  3160 LB02-PRD-S1
 82 13:29   230   179    41   111  2601  3055 LB02-PRD-S1
 83 13:45   230   176    42   116  2639  3129 LB02-PRD-S1
 84 13:59   230   181    43   126  2683  3277 LB02-PRD-S1
 85 14:15   245   181    47   123  2597  3160 LB02-PRD-S1
 86 14:30   245   181    48   128  2482  3122 LB02-PRD-S1
 87 00:15    25   101    20    18   712   584 GC03-PRD-S1
 88 00:30    25    99    20    17   673   551 GC03-PRD-S1
 89 00:45    25    97    20    17   686   559 GC03-PRD-S1
 90 00:58    25    96    20    16   639   524 GC03-PRD-S1
 91 01:13    40    99    19    16   647   518 GC03-PRD-S1
 92 01:27    40   105    19    16   669   543 GC03-PRD-S1
 93 01:45    40   107    21    18   723   598 GC03-PRD-S1
 94 01:59    40   107    25    19   746   605 GC03-PRD-S1
 95 02:12    55   109    23    20   775   645 GC03-PRD-S1
 96 02:27    55   111    20    20   780   671 GC03-PRD-S1
 97 02:41    55   116    21    21   811   710 GC03-PRD-S1
 98 02:59    55   113    17    22   858   765 GC03-PRD-S1
 99 03:13    70   117    21    23   900   789 GC03-PRD-S1
100 03:30    70   117    20    23   953   843 GC03-PRD-S1
101 03:45    70   120    20    25   980   882 GC03-PRD-S1
102 03:58    70   122    22    26  1000   916 GC03-PRD-S1
103 04:14    85   122    23    27  1049   961 GC03-PRD-S1
104 04:29    85   126    23    28  1072   992 GC03-PRD-S1
105 04:43    85   131    22    29  1110  1056 GC03-PRD-S1
106 04:59    85   130    22    30  1066  1047 GC03-PRD-S1
107 05:13   100   129    21    28  1166  1057 GC03-PRD-S1
108 05:29   100   137    27    34  1346  1247 GC03-PRD-S1
109 05:45   100   137    22    34  1272  1261 GC03-PRD-S1
110 06:00   100   136    20    33  1222  1235 GC03-PRD-S1
111 06:13   115   139    23    36  1321  1321 GC03-PRD-S1
112 06:29   115   142    23    37  1340  1377 GC03-PRD-S1
113 06:43   115   144    24    38  1362  1418 GC03-PRD-S1
114 06:59   115   150    27    44  1470  1579 GC03-PRD-S1
115 07:14   130   151    27    45  1466  1618 GC03-PRD-S1
116 07:30   130   153    31    54  1686  1875 GC03-PRD-S1
117 07:44   130   155    33    59  1679  1998 GC03-PRD-S1
118 07:59   130   157    33    59  1676  2021 GC03-PRD-S1
119 08:13   145   157    33    61  1700  2041 GC03-PRD-S1
120 08:29   145   160    35    64  1764  2120 GC03-PRD-S1
121 08:44   145   160    36    67  1765  2182 GC03-PRD-S1
122 08:59   145   162    40    71  1762  2208 GC03-PRD-S1
123 00:01   145   162    39    69  1754  2208 GC03-PRD-S1
124 00:15    60   127    27    40  1267  1274 GT04-PRD-S1
125 00:29    60   131    29    40  1264  1274 GT04-PRD-S1
126 00:44    60   133    30    40  1281  1298 GT04-PRD-S1
127 00:58    60   134    29    42  1304  1360 GT04-PRD-S1
128 01:14    80   134    28    40  1274  1324 GT04-PRD-S1
129 01:30    80   137    28    40  1337  1335 GT04-PRD-S1
130 01:45    80   144    29    45  1485  1501 GT04-PRD-S1
131 02:00    80   144    30    50  1573  1630 GT04-PRD-S1
132 02:14   100   148    30    47  1380  1478 GT04-PRD-S1
133 02:29   100   150    30    49  1520  1576 GT04-PRD-S1
134 02:45   100   153    31    50  1553  1589 GT04-PRD-S1
135 02:59   100   151    31    55  1735  1818 GT04-PRD-S1
136 03:13   120   153    32    65  1905  2146 GT04-PRD-S1
137 03:28   120   151    32    62  1748  2026 GT04-PRD-S1
138 03:44   120   160    31    61  1799  2041 GT04-PRD-S1
139 03:58   120   160    30    64  1810  2105 GT04-PRD-S1
140 04:13   140   164    33    73  1895  2314 GT04-PRD-S1
141 04:28   140   162    33    72  1966  2345 GT04-PRD-S1
142 04:44   140   166    36    79  2021  2470 GT04-PRD-S1
143 05:00   140   166    35    76  2022  2450 GT04-PRD-S1
144 05:14   160   164    37    78  2115  2491 GT04-PRD-S1
145 05:29   160   169    40    82  2147  2583 GT04-PRD-S1
146 05:44   160   169    38    83  2190  2647 GT04-PRD-S1
147 05:59   160   173    38    85  2202  2713 GT04-PRD-S1
148 06:15   180   171    38    88  2332  2837 GT04-PRD-S1
149 06:29   180   171    41    95  2321  2937 GT04-PRD-S1
150 06:45   180   176    39    94  2358  2994 GT04-PRD-S1
151 06:59   180   176    42   104  2339  3086 GT04-PRD-S1
152 07:09   200   176    44   105  2444  3186 GT04-PRD-S1

1 个答案:

答案 0 :(得分:1)

在基数R中,我们可以使用ave

df$percentage <- with(df, power * 100/ave(power, id, FUN = max))

head(df)
#   time power hr fr VE VO2 VCO2          id percentage
#1 00:15    25 90 24 20 632  549 LM01-PRD-S1       21.7
#2 00:28    25 92 23 21 679  597 LM01-PRD-S1       21.7
#3 00:44    25 93 22 21 675  607 LM01-PRD-S1       21.7
#4 01:00    25 93 20 19 680  577 LM01-PRD-S1       21.7
#5 01:15    40 96 20 22 745  660 LM01-PRD-S1       34.8
#6 01:29    40 98 21 22 764  675 LM01-PRD-S1       34.8

或与dplyr

library(dplyr)
df %>%  group_by(id) %>%  mutate(percentage = power*100/max(power))

data.table

library(data.table)
setDT(df)[, percentage := power*100/max(power), by = id]