2017-07-22 74 views
0

我有一個數據幀的日期,包括日期,時間和值查找一個數據幀行具有一定日期:使用子集

Date   Time   Global_active_power 
    16/12/2006 17:24:00  4.216 
    16/12/2006 18:25:00  4.5 
    17/12/2006 17:25:00  4.52 
    18/12/2006 17:25:00  4.557 

現在我想找到根據日期的行 - 例如所有行日期> 16/12/2006。

這是我的代碼:

Data$Date<- as.Date(Data$Date,"%dd%mm%yyyy") 
Data$Time<-strptime(Data$Time, "%h%m%s") 
print(class(Data$Date)) 
print(class(Data$Time)) 
Data1<-subset(Data, (Date=="16/12/2006")) 
View(Data1) 

類的日期和時間分別爲因素和因素,但現在他們是日期和「POSIXlt」「POSIXt」。當我執行subset-command時,Data1是空的。

爲什麼?它應該包含前2個數據集。

+1

一件事,你的日期變量的格式不正確,'as.Date(數據$日期, 「DD%%毫米%YYYY」)'應該是'as.Date(數據$日期,「%d /%m /%Y「)'在'?strptime'處查看示例。此外,當轉換爲日期變量,你會想用'數據$日期== as.Date(「2006-12-16」)'這是R變換後使用的格式。 – lmo

回答

1
Data$Date<- as.Date(Data$Date,"%d/%m/%Y") # date format now 'yyyy-mm-dd' 
Data$Time <- as.POSIXct(strptime(Data$Time, "%H:%M:%S")) 
print(class(Data$Date)) 
print(class(Data$Time)) 

Data1 <- subset(Data, Date > "2006-12-16") 

View(Data1) 
+0

這並不工作 - 它給了我NA中的所有列/行 – user3443063

+1

因爲日期和時間格式是錯誤的,他們應分別爲,'「%d /%M /%Y」'和'「%H:% M:%S「'。 –

+1

我只是做了應該糾正的編輯。瑞是正確的。我的疏忽。 – Odysseus210

1

轉換Time變量存在問題。由於它沒有日期,只是一個時間,當你申請strptime,它會自動插入今天的日期。這顯然不是你想要的。我相信最好的解決方案是創建一個新列DateTime

Data$Date <- as.Date(Data$Date, "%d/%m/%Y") 

# See the output date (today) 
strptime(Data$Time, "%H:%M:%S") 
[1] "2017-07-22 17:24:00 BST" "2017-07-22 18:25:00 BST" 
[3] "2017-07-22 17:25:00 BST" "2017-07-22 17:25:00 BST" 

DateTime <- paste(Data$Date, Data$Time) 
DateTime 
[1] "2006-12-16 17:24:00" "2006-12-16 18:25:00" "2006-12-17 17:25:00" 
[4] "2006-12-18 17:25:00" 

Data$DateTime <- as.POSIXct(DateTime, format = "%Y-%m-%d %H:%M:%S") 

Data1 <- subset(Data, Date > as.Date("2006-12-16")) 
View(Data1) 

如果你想保持數據/時間相關的變量在一起,你可以調換列3和4

Data <- Data[, c(1, 2, 4, 3)] 
Data 
     Date  Time   DateTime Global_active_power 
1 2006-12-16 17:24:00 2006-12-16 17:24:00    4.216 
2 2006-12-16 18:25:00 2006-12-16 18:25:00    4.500 
3 2006-12-17 17:25:00 2006-12-17 17:25:00    4.520 
4 2006-12-18 17:25:00 2006-12-18 17:25:00    4.557 

只有這樣,你會Data1 <- subset(...)