2017-06-28 62 views
0

精確的範圍和採樣的可視化我ggplot有表如下給出:根據中的R

Day |Date  |Temp1 
    ----|-----------|--------------- 
    1 |9/15/2014 |85   
    2 |9/16/2014 |85   
    3 |9/17/2014 |88   
    4 |9/18/2014 |83    
    .. |.....  |..   
    871 |6/8/2017 |98 

我有很多數據作爲日期列2014年9月15日2017年6月8日爲止。我選擇在6個月內完成ggplot清理。

這是我的代碼:

library(ggplot2) 
#library(Rserve) 
#Rserve(args = "--vanilla") 

Test <- read_csv("C:/Users/..../Desktop/Myfile.csv") 

valueDatemax <- max(Test$Date) 

valueDatemin <- min(Test$Date) 

# Simulate some data 
df <- data.frame(Test, 
       Test$Date <- seq.Date(from = as.Date(valueDatemin), 
       to = as.Date(valueDatemax), 
       by="6 month")) 

require(ggplot2) 

p<-ggplot(df, aes(x=Test$Date, y=Temp1)) 

print(p) 

但是我有不明白的錯誤,我想淨所有的解決方案,但我沒有找到。

此錯誤:

Error in `$<-.data.frame`(`*tmp*`, Date, value = c(-719143, -718962, -718778, : 
    replacement has 18 rows, data has 871 

,我想以後可以選擇我的日期範圍,例如每過去30天。

你能幫助我嗎?

謝謝

+0

你爲什麼要在數據幀'df''Test $ Date'中調用一個變量?只要稱它爲'Date',並在你的'aes'調用中引用它。 – Axeman

+0

我遵循你的建議,用'Date'替換'Test $ Date'。但我有大致相同的錯誤:'錯誤data.frame(測試,日期< - seq.Date(從= as.Date(valueDatemin),: 參數意味着不同的行數:871,18' –

+0

發生錯誤?在創建'df'或繪圖時?對任何人來說,如果沒有一個可重複的例子是很困難的。 – Axeman

回答

0

似乎Date被回收爲Test的長度,這是造成你掛斷。

嘗試子集您的原始數據框,但我不確定Temp1來自哪裏。

df <-Test[Date==seq.Date(from = as.Date(valueDatemin), 
             to = as.Date(valueDatemax), 
             by="6 month"),] 
require(ggplot2) 

p<-ggplot(df, aes(x=Date, y=Temp1)) 

print(p) 

如果你想在過去的30行

tail(df,30)

0

你有一個數據導入的問題,而不是一個繪圖問題。具體來說:

  1. 您沒有提供CSV文件的小例子。這使得很難知道您的CSV文件實際上是否正確,並且可以根據您所調用的函數按預期解析。我將承擔 「Myfile.csv」:

星期,日期,TEMP1

1,2014年9月15日,85

2,2014年9月16日,85

3,2014年9月17日,88

4,2014年9月18日,83

5,2014年9月19日,83

  • 似乎有一個丟失的依賴:在read_csv文件不在基地R.也許你的意思是readr :: read_csv?我假設這篇文章的其餘部分。
  • 關鍵的一點是,我看不到任何代碼告訴R你的第二列是日期。我也沒有看到關於這個日期格式化和應該被解析的信息。仔細看看readr vignette
  • 不需要使用seq.Date,只要確保您的數據是類「日期」,並調用seq就可以了。
  • 改正的代碼可能看起來像:

    library(ggplot2) 
    library(readr) 
    
    Test <- read_csv(
        "Myfile.csv", 
        col_types=list(
        Day=col_integer(), 
        Date=col_date("%m/%d/%Y"), 
        Temp1=col_integer() 
    ) 
    ) 
    
    print(class(Test$Date)) # a Date object as expected 
    
    valueDatemax <- max(Test$Date) 
    valueDatemin <- min(Test$Date) 
    
    date <- seq(from = valueDatemin, to = valueDatemax, by="2 days") 
    # TODO: change "by" as needed in the final code 
    
    Test <- Test[Test$Date %in% date, ] # keep only the desired dates 
    
    p <- ggplot(Test, aes(Date, Temp1)) + geom_point() 
    print(p) 
    

    enter image description here

    注:如果你有你的日期是如何表示的選擇,選擇的標準格式,如ISO 8601。這將有助於你的任務,因爲readr將能夠自動猜測它正在處理日期。

    +0

    你現在有幾個答案,@ R.Bun。請將其中一個標記爲解決方案或澄清你最初的問題。 –