for循环选择具有条件的特定行

时间:2017-11-07 11:07:55

标签: r for-loop dataframe syntax

我想创建一个循环,逐行读取数据帧batch。您可以看到列batch值在某个时间后重复(10,1,2,3,4,5,6,7,8,9,1,2,3,4,5 ...... )

现在我应该在批处理完成时保存整行值。例如,批次10在2017-11-01 06:09:00 10 36 2775.430 70.20428 15.79604完成,我希望将其保存到新的数据帧。批处理1在2017-11-01 06:54:00 1 35 2781.480 70.49287 15.79604完成,需要保存,批处理2在2017-11-01 08:24:00 2 36 2782.080 69.56226 15.98735完成,这需要保存..等等。

我有什么建议可以写这个吗?

             event_time   batch  duration   size       TP       YU
1    2017-11-01 05:34:00    10       36 2041.761 68.69974 15.79604
2    2017-11-01 05:39:00    10       36 2230.944 68.69974 15.79604
3    2017-11-01 05:44:00    10       36 2393.590 68.69974 15.79604
4    2017-11-01 05:49:00    10       36 2462.384 59.76005 15.79604
5    2017-11-01 05:54:00    10       36 2462.384 64.85409 15.79604
6    2017-11-01 05:59:00    10       36 2721.387 70.20428 15.79604
7    2017-11-01 06:04:00    10       36 2721.387 70.20428 15.79604
8    2017-11-01 06:09:00    10       36 2775.430 70.20428 15.79604
9    2017-11-01 06:14:00     1       35  103.060 70.20428  0.00000
10   2017-11-01 06:19:00     1       35 2237.591 70.20428 15.79604
11   2017-11-01 06:24:00     1       35 2237.591 70.20428 15.79604
12   2017-11-01 06:29:00     1       35 2399.109 70.20428 15.79604
13   2017-11-01 06:34:00     1       35 2467.942 60.56096 15.79604
14   2017-11-01 06:39:00     1       35 2467.942 65.68742 15.79604
15   2017-11-01 06:44:00     1       35 2726.943 70.49287 15.79604
16   2017-11-01 06:49:00     1       35 2726.943 70.49287 15.79604
17   2017-11-01 06:54:00     1       35 2781.480 70.49287 15.79604
18   2017-11-01 06:59:00     2       36  103.060 70.49287  0.00000
19   2017-11-01 07:04:00     2       36  103.060 70.49287  0.00000
20   2017-11-01 07:09:00     2       36  103.060 70.49287  0.00000
21   2017-11-01 07:14:00     2       36  103.060 70.49287  0.00000
22   2017-11-01 07:19:00     2       36  103.060 70.49287  0.00000
23   2017-11-01 07:24:00     2       36  103.060 70.49287  0.00000
24   2017-11-01 07:29:00     2       36  103.060 70.49287  0.00000
25   2017-11-01 07:34:00     2       36  103.060 70.49287  0.00000
26   2017-11-01 07:39:00     2       36  103.060 70.49287  0.00000
27   2017-11-01 07:44:00     2       36  103.060 70.49287  0.00000
28   2017-11-01 07:49:00     2       36  103.060 70.49287  0.00000
29   2017-11-01 07:54:00     2       36 2236.194 70.49287 15.98735
30   2017-11-01 07:59:00     2       36 2399.229 70.49287 15.98735
31   2017-11-01 08:04:00     2       36 2468.023 55.81712 15.98735
32   2017-11-01 08:09:00     2       36 2468.023 59.34176 15.98735
33   2017-11-01 08:14:00     2       36 2727.026 69.56226 15.98735
34   2017-11-01 08:19:00     2       36 2727.026 69.56226 15.98735
35   2017-11-01 08:24:00     2       36 2782.080 69.56226 15.98735
36   2017-11-01 08:29:00     3       34  103.060 69.56226  0.00000
37   2017-11-01 08:34:00     3       34  103.060 69.56226  0.00000
38   2017-11-01 08:39:00     3       34 2231.033 69.56226 15.89170
39   2017-11-01 08:44:00     3       34 2392.901 69.56226 15.89170
40   2017-11-01 08:49:00     3       34 2461.345 60.88197 15.89170
41   2017-11-01 08:54:00     3       34 2461.345 60.88197 15.89170
42   2017-11-01 08:59:00     3       34 2720.346 70.81388 15.89170
43   2017-11-01 09:04:00     3       34 2720.346 70.81388 15.89170
44   2017-11-01 09:09:00     3       34 2774.288 70.81388 15.89170
45   2017-11-01 09:14:00     4       36  103.060 70.81388  0.00000
46   2017-11-01 09:19:00     4       36  103.060 70.81388  0.00000
47   2017-11-01 09:24:00     4       36  103.060 70.81388  0.00000
48   2017-11-01 09:29:00     4       36  103.060 70.81388  0.00000
49   2017-11-01 09:34:00     4       36  103.060 70.81388  0.00000
50   2017-11-01 09:39:00     4       36  103.060 70.81388  0.00000
51   2017-11-01 09:44:00     4       36  103.060 70.81388  0.00000
52   2017-11-01 09:49:00     4       36 2226.752 70.81388 15.98735
53   2017-11-01 09:54:00     4       36 2455.156 70.81388 15.98735
54   2017-11-01 09:59:00     4       36 2455.156 56.55642 15.98735
55   2017-11-01 10:04:00     4       36 2455.156 56.55642 15.98735
56   2017-11-01 10:09:00     4       36 2455.156 68.57004 15.98735
57   2017-11-01 10:14:00     4       36 2714.158 69.78924 15.98735
58   2017-11-01 10:19:00     4       36 2714.158 69.78924 15.98735
59   2017-11-01 10:24:00     5       37  103.060 69.78924  0.00000
60   2017-11-01 10:29:00     5       37 2227.467 69.78924 15.89170
61   2017-11-01 10:34:00     5       37 2389.723 69.78924 15.89170
62   2017-11-01 10:39:00     5       37 2389.723 69.78924 15.89170
63   2017-11-01 10:44:00     5       37 2457.778 69.78924 15.89170
64   2017-11-01 10:49:00     5       37 2457.778 57.93126 15.89170
65   2017-11-01 10:54:00     5       37 2457.778 66.80934 15.89170
66   2017-11-01 10:59:00     5       37 2716.779 70.52529 15.89170
67   2017-11-01 11:04:00     5       37 2716.779 70.52529 15.89170
68   2017-11-01 11:09:00     6       40  103.060 70.52529  0.00000
69   2017-11-01 11:14:00     6       40  103.060 70.52529  0.00000
70   2017-11-01 11:19:00     6       40  103.060 70.52529  0.00000
71   2017-11-01 11:24:00     6       40  103.060 70.52529  0.00000
72   2017-11-01 11:29:00     6       40  103.060 70.52529  0.00000
73   2017-11-01 11:34:00     6       40  103.060 70.52529  0.00000
74   2017-11-01 11:39:00     6       40  103.060 70.52529  0.00000
75   2017-11-01 11:44:00     6       40  103.060 70.52529  0.00000
76   2017-11-01 11:49:00     6       40  103.060 70.52529  0.00000
77   2017-11-01 11:54:00     6       40  103.060 70.52529  0.00000
78   2017-11-01 11:59:00     6       40 2241.928 70.52529 15.89170
79   2017-11-01 12:04:00     6       40 2241.928 70.52529 15.89170
80   2017-11-01 12:09:00     6       40 2471.500 57.51621 15.89170
81   2017-11-01 12:14:00     6       40 2471.500 59.79248 15.89170
82   2017-11-01 12:19:00     6       40 2730.503 70.46044 15.89170
83   2017-11-01 12:24:00     6       40 2730.503 70.46044 15.89170
84   2017-11-01 12:29:00     6       40 2784.518 70.46044 15.89170
85   2017-11-01 12:34:00     7       32  103.060 70.46044  0.00000
86   2017-11-01 12:39:00     7       32  103.060 70.46044  0.00000
87   2017-11-01 12:44:00     7       32 2228.652 70.46044 15.81226
89   2017-11-01 12:54:00     7       32 2459.002 62.45136 15.81226
90   2017-11-01 12:59:00     7       32 2459.002 66.39105 15.81226
91   2017-11-01 13:04:00     7       32 2718.004 71.96498 15.81226
92   2017-11-01 13:09:00     7       32 2718.004 71.96498 15.81226
93   2017-11-01 13:14:00     7       32 2771.915 71.96498 15.81226
94   2017-11-01 13:19:00     8       33  103.060 71.96498  0.00000
95   2017-11-01 13:24:00     8       33 2237.687 71.96498 15.89170
96   2017-11-01 13:29:00     8       33 2469.166 71.96498 15.89170
97   2017-11-01 13:34:00     8       33 2469.166 62.80156 15.89170
98   2017-11-01 13:39:00     8       33 2469.166 66.29378 15.89170
99   2017-11-01 13:44:00     8       33 2728.167 70.87549 15.89170
100  2017-11-01 13:49:00     8       33 2728.167 70.87549 15.89170
101  2017-11-01 13:54:00     9       34  103.060 70.87549  0.00000
102  2017-11-01 13:59:00     9       34  103.060 70.87549  0.00000
103  2017-11-01 14:04:00     9       34  103.060 70.87549  0.00000
104  2017-11-01 14:09:00     9       34  103.060 70.87549  0.00000
105  2017-11-01 14:14:00     9       34  103.060 70.87549  0.00000
106  2017-11-01 14:19:00     9       34 2045.649 70.87549 15.98735
107  2017-11-01 14:24:00     9       34 2234.832 70.87549 15.98735
108  2017-11-01 14:29:00     9       34 2460.513 60.75227 15.98735
109  2017-11-01 14:34:00     9       34 2460.513 60.75227 15.98735
110  2017-11-01 14:39:00     9       34 2719.514 71.99741 15.98735
111  2017-11-01 14:44:00     9       34 2719.514 72.06226 15.98735
112  2017-11-01 14:49:00     9       34 2719.514 72.06226 15.98735
113  2017-11-01 14:54:00     1       32  103.060 72.06226  0.00000
114  2017-11-01 14:59:00     1       32  103.060 72.06226  0.00000
115  2017-11-01 15:04:00     1       32 2232.300 72.06226 15.79604
116  2017-11-01 15:09:00     1       32 2459.926 64.69196 15.79604
117  2017-11-01 15:14:00     1       32 2459.926 64.69196 15.79604
118  2017-11-01 15:19:00     1       32 2718.928 72.06226 15.79604
119  2017-11-01 15:24:00     1       32 2718.928 72.63943 15.79604
120  2017-11-01 15:29:00     1       32 2718.928 72.63943 15.79604
121  2017-11-01 15:34:00     2       32  103.060 72.63943  0.00000
122  2017-11-01 15:39:00     2       32  103.060 72.63943  0.00000
123  2017-11-01 15:44:00     2       32 2233.733 72.63943 15.79604
124  2017-11-01 15:49:00     2       32 2462.099 64.50065 15.79604
125  2017-11-01 15:54:00     2       32 2462.099 64.53307 15.79604
126  2017-11-01 15:59:00     2       32 2721.101 71.93580 15.79604
127  2017-11-01 16:04:00     2       32 2721.101 72.67185 15.79604
128  2017-11-01 16:09:00     2       32 2721.101 72.67185 15.79604
129  2017-11-01 16:14:00     3       33  103.060 72.67185  0.00000
130  2017-11-01 16:19:00     3       33  103.060 72.67185  0.00000
131  2017-11-01 16:24:00     3       33  103.060 72.67185  0.00000
132  2017-11-01 16:29:00     3       33  103.060 72.67185  0.00000
133  2017-11-01 16:34:00     3       33 2233.003 72.67185 15.98735
134  2017-11-01 16:39:00     3       33 2394.871 72.67185 15.98735
135  2017-11-01 16:44:00     3       33 2462.536 62.22763 15.98735
136  2017-11-01 16:49:00     3       33 2462.536 68.21660 15.98735
137  2017-11-01 16:54:00     3       33 2721.537 72.22438 15.98735
138  2017-11-01 16:59:00     3       33 2721.537 72.22438 15.98735
139  2017-11-01 17:04:00     3       33 2775.676 72.22438 15.98735
140  2017-11-01 17:09:00     4       33 2232.340 72.22438 15.60311
141  2017-11-01 17:14:00     4       33 2392.301 72.22438 15.60311
142  2017-11-01 17:19:00     4       33 2460.356 65.71984 15.60311
143  2017-11-01 17:24:00     4       33 2460.356 66.03761 15.60311
144  2017-11-01 17:29:00     4       33 2719.357 73.50519 15.60311
145  2017-11-01 17:34:00     4       33 2719.357 73.50519 15.60311
146  2017-11-01 17:39:00     4       33 2719.357 73.50519 15.60311
147  2017-11-01 17:44:00     5       36  103.060 73.50519  0.00000
148  2017-11-01 17:49:00     5       36 1909.972 73.50519 15.79604
149  2017-11-01 17:54:00     5       36 2239.077 73.50519 15.79604
150  2017-11-01 17:59:00     5       36 2471.684 65.07782 15.79604
151  2017-11-01 18:04:00     5       36 2471.684 65.07782 15.79604
152  2017-11-01 18:09:00     5       36 2730.686 72.63943 15.79604
153  2017-11-01 18:14:00     5       36 2730.686 73.34306 15.79604
154  2017-11-01 18:19:00     5       36 2730.686 73.34306 15.79604
155  2017-11-01 18:24:00     5       36 2785.718 73.34306 15.79604
156  2017-11-01 18:29:00     6       38  103.060 73.34306  0.00000
157  2017-11-01 18:34:00     6       38  103.060 73.34306  0.00000
158  2017-11-01 18:39:00     6       38  103.060 73.34306  0.00000
159  2017-11-01 18:44:00     6       38  103.060 73.34306  0.00000
160  2017-11-01 18:49:00     6       38  103.060 73.34306  0.00000
161  2017-11-01 18:54:00     6       38  103.060 73.34306  0.00000
162  2017-11-01 18:59:00     6       38 2222.261 73.34306 16.10084
163  2017-11-01 19:04:00     6       38 2453.739 73.34306 16.10084
164  2017-11-01 19:09:00     6       38 2453.739 60.94358 16.10084
165  2017-11-01 19:14:00     6       38 2453.739 70.04539 16.10084
166  2017-11-01 19:19:00     6       38 2712.741 72.63943 16.10084
167  2017-11-01 19:24:00     6       38 2712.741 72.63943 16.10084

2 个答案:

答案 0 :(得分:0)

我认为您仍需要澄清一点,但不需要for循环:

xdf <- read.table("so.dat", header = TRUE, stringsAsFactors = FALSE)

xdf[cumsum(rle(xdf$batch)$lengths),]
##              event_time batch duration     size       TP       YU
## 8   2017-11-01 06:09:00    10       36 2775.430 70.20428 15.79604
## 17  2017-11-01 06:54:00     1       35 2781.480 70.49287 15.79604
## 35  2017-11-01 08:24:00     2       36 2782.080 69.56226 15.98735
## 44  2017-11-01 09:09:00     3       34 2774.288 70.81388 15.89170
## 58  2017-11-01 10:19:00     4       36 2714.158 69.78924 15.98735
## 67  2017-11-01 11:04:00     5       37 2716.779 70.52529 15.89170
## 84  2017-11-01 12:29:00     6       40 2784.518 70.46044 15.89170
## 92  2017-11-01 13:14:00     7       32 2771.915 71.96498 15.81226
## 99  2017-11-01 13:49:00     8       33 2728.167 70.87549 15.89170
## 111 2017-11-01 14:49:00     9       34 2719.514 72.06226 15.98735
## 119 2017-11-01 15:29:00     1       32 2718.928 72.63943 15.79604
## 127 2017-11-01 16:09:00     2       32 2721.101 72.67185 15.79604
## 138 2017-11-01 17:04:00     3       33 2775.676 72.22438 15.98735
## 145 2017-11-01 17:39:00     4       33 2719.357 73.50519 15.60311
## 154 2017-11-01 18:24:00     5       36 2785.718 73.34306 15.79604
## 166 2017-11-01 19:24:00     6       38 2712.741 72.63943 16.10084

答案 1 :(得分:0)

另一种方法是使用dplyr包:

library(dplyr)
# df is the data.frame you provided
new.df <- df %>% mutate(..change = batch != lag(batch)) %>% filter(lead(..change))