2016-05-01 30 views
5

Tôi cần trợ giúp về vấn đề này:Cách chọn giá trị theo giờ từ tập dữ liệu?

Tôi có tập dữ liệu giá trị cấp nước được phân phối cứ sau 30 phút, nhưng tôi chỉ cần giá trị theo giờ. Tôi đã thử với các chức năng aggregate() nhưng do chức năng FUN là một điều kiện tiên quyết nó xác định phân tích của tôi có nghĩa là, hoặc trung bình và tôi không muốn sử dụng bất kỳ chức năng stat.

Đây là một ví dụ của khung dữ liệu của tôi

06/16/2015 02:00:00 0.036068 
06/16/2015 02:30:00 0.008916 
06/16/2015 03:00:00 -0.008622 
06/16/2015 03:30:00 -0.014057 
06/16/2015 04:00:00 -0.011172 
06/16/2015 04:30:00 0.002401 
06/16/2015 05:00:00 0.029632 
06/16/2015 05:30:00 0.061902002 
06/16/2015 06:00:00 0.087366998 
06/16/2015 06:30:00 0.105176002 
06/16/2015 07:00:00 0.1153 
06/16/2015 07:30:00 0.126197994 
06/16/2015 08:00:00 0.144154996 
+1

Điều này chọn ra mọi hàng khác: 'DF [c (TRUE, FALSE),]' bắt đầu bằng hàng đầu tiên. –

+0

Cảm ơn, đó là ok và đã giúp tôi! nhưng tôi có tập dữ liệu khác trong đó bước thời gian là 1 phút. Vì vậy, trong trường hợp đó tôi sẽ cần các thuật toán khác để chọn các giá trị theo giờ. – FernRay

+0

Tôi đã cố gắng sử dụng chức năng này: – FernRay

Trả lời

2

Chúng tôi chuyển đổi cột 'RefDateTimeRef' để POSIXct, trích xuất các 'phút', 'thứ hai' với format và so sánh nó với 00:00 để trả về một vector logic mà chúng tôi sử dụng để đặt các hàng.

df1[format(as.POSIXct(df1[,1], format = "%m/%d/%Y %H:%M"), "%M:%S")=="00:00",] 
#  RefDateTimeRef Data 
#10 04/14/2016 09:00 0.153 
#22 04/14/2016 08:00 0.148 

Hoặc với lubridate

library(lubridate) 
df1[ minute(mdy_hm(df1[,1]))==0,] 
#  RefDateTimeRef Data 
#10 04/14/2016 09:00 0.153 
#22 04/14/2016 08:00 0.148 

Hoặc với sub để loại bỏ các chuỗi con cho đến khi phần giờ và sau đó sử dụng == để có được những vector logic và tập hợp con các hàng.

df1[ sub(".*\\s+\\S{2}:", "", df1[,1])=="00",] 

Chú ý: Tôi sẽ khuyên không nên sử dụng sub hoặc substr vì nó đôi khi có thể dẫn đến câu trả lời không chính xác.

3
df <- read.table(text = '06/16/2015 02:00:00 0.036068 
06/16/2015 02:30:00 0.008916 
06/16/2015 03:00:00 -0.008622 
06/16/2015 03:30:00 -0.014057 
06/16/2015 04:00:00 -0.011172 
06/16/2015 04:30:00 0.002401 
06/16/2015 05:00:00 0.029632 
06/16/2015 05:30:00 0.061902002 
06/16/2015 06:00:00 0.087366998 
06/16/2015 06:30:00 0.105176002 
06/16/2015 07:00:00 0.1153 
06/16/2015 07:30:00 0.126197994 
06/16/2015 08:00:00 0.144154996') 

colnames(df) <- c('Date','Time','Value') 

index <- ifelse(substring(df$Time,4) == "00:00",T,F) 

final_df <- df[index,] 
Các vấn đề liên quan