डेटा को समय के अनुसार वर्गीकृत करते समय मुझे समस्याओं का सामना करना पड़ा। यहां बताया गया है कि यह कैसा दिखता है:

मेरे पास डेटा की एक सूची है जो प्रत्येक अवधि के प्रारंभ समय और समाप्ति समय को निर्दिष्ट करती है:

   Period    Start      END
1      A1 11:08:58 11:11:58
2      A2 12:08:58 12:11:58
3      A3 13:08:58 13:11:58
4      A4 14:08:58 14:11:58
5      A5 15:08:58 15:11:58
6      A6 16:08:58 16:11:58
7      A7 17:08:58 17:11:58
8      A8 18:08:58 18:11:58
9      A9 19:08:58 19:11:58
10    A10 20:08:58 20:11:58
11    A11 21:08:58 21:11:58
12    A12 22:08:58 22:11:58
13    A13 23:08:58 23:11:58
14    A14 00:08:58 00:11:58
15    A15 01:08:58 01:11:58
16    A16 02:08:58 02:11:58
17    A17 03:08:58 03:11:58
18    A18 04:08:58 04:11:58
19    A19 05:08:58 05:11:58
20    A20 06:08:58 06:11:58

मेरे पास एक और सूची भी है जो उस समय को निर्दिष्ट करती है जब प्रत्येक लेनदेन होता है:

Transaction Transaction.Time
1        TR015         12:10:58
2        TR008         18:10:58
3        TR009         13:10:58
4        TR019         14:10:58
5        TR001         15:10:58
6        TR011         16:10:58
7        TR018         17:10:58
8        TR005         11:10:58
9        TR013         19:10:58
10       TR012         20:10:58
11       TR014         21:10:58
12       TR004         22:10:58
13       TR020         23:10:58
14       TR010         00:10:58
15       TR016         01:10:58
16       TR007         02:10:58
17       TR017         03:10:58
18       TR006         04:10:58
19       TR003         05:10:58
20       TR002         06:10:58

मैंने जो करने की कोशिश की वह यह जानने के लिए इन दो सूचियों को मर्ज करना है कि प्रत्येक लेनदेन किस अवधि में होता है, जैसे:

   Transaction Transaction.Time Period    Start      END
1        TR015         12:10:58 A2        12:08:58 12:11:58
2        TR008         18:10:58 A8        18:08:58 18:11:58
3        TR009         13:10:58 A3        13:08:58 13:11:58
r
-1
郭傳誠 26 जून 2018, 07:04

2 जवाब

सबसे बढ़िया उत्तर

मैं इस तरह एक प्रतिलिपि प्रस्तुत करने योग्य उदाहरण बनाउंगा:

period = read_delim('No Period Start END
1 A1 11:08:58 11:11:58
2 A2 12:08:58 12:11:58
3 A3 13:08:58 13:11:58
4 A4 14:08:58 14:11:58
5 A5 15:08:58 15:11:58
6 A6 16:08:58 16:11:58
7 A7 17:08:58 17:11:58
8 A8 18:08:58 18:11:58
9 A9 19:08:58 19:11:58
10 A10 20:08:58 20:11:58
11 A11 21:08:58 21:11:58
12 A12 22:08:58 22:11:58
13 A13 23:08:58 23:11:58
14 A14 00:08:58 00:11:58
15 A15 01:08:58 01:11:58
16 A16 02:08:58 02:11:58
17 A17 03:08:58 03:11:58
18 A18 04:08:58 04:11:58
19 A19 05:08:58 05:11:58
20 A20 06:08:58 06:11:58', delim = ' ')

tnx = read_delim('No Transaction Time
1 TR015 12:10:58
2 TR008 18:10:58
3 TR009 13:10:58
4 TR019 14:10:58
5 TR001 15:10:58
6 TR011 16:10:58
7 TR018 17:10:58
8 TR005 11:10:58
9 TR013 19:10:58
10 TR012 20:10:58
11 TR014 21:10:58
12 TR004 22:10:58 
13 TR020 23:10:58
14 TR010 00:10:58
15 TR016 01:10:58
16 TR007 02:10:58
17 TR017 03:10:58
18 TR006 04:10:58
19 TR003 05:10:58
20 TR002 06:10:58', delim = ' ')

एक समय अवधि का पता लगाने के लिए, आपको इसे कुछ दिनांक समय प्रारूप में बदलने में सक्षम होना चाहिए, यहां तिथि अप्रासंगिक है, इसलिए आप किसी भी तारीख में इसे पार्स करने वाले फ़ंक्शन को छोड़ सकते हैं, फिर भी काम करता है। यह भी सुनिश्चित होना चाहिए कि अवधि डेटा पूरा हो गया है, इसका मतलब है कि कोई समय टिकट सीमा से बाहर नहीं है।

require(lubridate)
require(tidyverse)
period = period %>% mutate(Start = as_datetime(Start),
                           END = as_datetime(END))

tnx = tnx %>% mutate(Time = as_datetime(Time))

locate_period = function(time_stamp, period_data) {
  period_data = period_data %>% filter(Start <= time_stamp) %>% filter(END >= time_stamp)
  period_data$Period[[1]]
}

tnx$Period = ''

for (i in 1:nrow(tnx)) {
  tnx$Period[[i]] = locate_period(tnx$Time[[i]], period)
}

tnx = left_join(tnx, period, by = 'Period')
0
minhsphuc12 26 जून 2018, 08:36

मैं आपके डेटा फ्रेम के लिए इन नामों को मानता हूं: df_period: समय अवधि के डेटा फ्रेम के लिए लेनदेन_होता है: लेनदेन के डेटा फ्रेम के लिए (इसमें कॉलम होना चाहिए)

df <- data.frame(transaction_occurs, period=0, start=0, end=0)

for(i in 1:nrow(transaction_occurs)){
  row_number <- which(df[i,2]>df_period$Start & df[i,2]<df_period$END)
  df[i,c(3,4,5)] <- df_period[row_number,]
}
0
Mahdi Baghbanzadeh 26 जून 2018, 08:03