2015-10-09 58 views
3

我每天的天氣數據都包含月份,月份,年份和數據的列。但是我需要在今年的某一天添加​​另一列。 例如1 - 365(或366閏年)。每年從1 - 365(366)起連續增加數量計數

我根本不是一個程序員,我很熟悉seq() seq(1, 365) 但是,上述內容將終止於365年。我需要在佔年度的情況下順序增加數量,以便序列從每年開始(並且佔閏年)。在這個例子中,所有天氣數據從1月1日開始。 任何想法/建議/指針非常讚賞。

編輯:示例數據

example.data <- structure(list(V1 = 1:6, V2 = c(1L, 1L, 1L, 1L, 1L, 1L), 
    V3 = c(1950L, 1950L, 1950L, 1950L, 1950L, 1950L), 
    V4 = c(NA, NA, NA, NA, NA, NA), 
    V5 = c(0, 0, 0, 0, 0, 0)), 
    .Names = c("V1", "V2", "V3", "V4", "V5"), row.names = c(NA, 6L), class =    "data.frame")` 
+1

要獲得在您的數據格式,對於那些回答問題的人來說很有用,試着運行'dput(head(dat))',其中'dat'是你數據框的名字。 – Aaron

回答

4

試試這個代碼,假設你的 「年」 列被命名爲 「V3」:

enter image description here

編輯:更嚴重的是,粘貼的一張相片數據是一個壞主意,see here關於如何包含數據以便人們更容易幫助。包括dput(head(data))幾乎總是最好的。

對於您的問題,在您的數據讀取:

z <- read.csv("test.data.txt", sep="\t", header = FALSE) 

然後使用dplyr到seq_along()每年:

library(dplyr) 
mydat <- z %>% group_by(V3) %>% 
       mutate(day = seq_along(V3)) 

我們可以驗證我們得到了一些366s:

sum(mydat$day == 366) 
sum(mydat$day == 365) 
+7

有人終於貼出圖片答案,以圖片數據哈哈哈總是想這樣做+1 –

+1

馬上給它。我喜歡它 –

+0

哈哈,我包括一個鏈接到一個測試數據集... – SoilSciGuy

4

R有Date班,這是一個很好的第一步;您可以通過將列粘貼到「Y-M-D」格式,然後致電as.Date。但還有一個更好的選項,即POSIXlt類,其中包含yday字段中的所需信息以及其他許多潛在的有用信息。那麼我將日期轉換爲POSIXlt格式,並獲得一年中的一天;因爲這與零開始我再加入1

dat <- data.frame(d=1:6, 
        m=rep(c(1,2,12), 2), 
        y=rep(c(1950, 1951), each=3)) 
dat$Date <- as.Date(with(dat, paste(y, m, d, sep="-"))) 
dat$doy <- as.POSIXlt(dat$Date)$yday + 1 
dat 
## d m y  Date doy 
## 1 1 1 1950 1950-01-01 1 
## 2 2 2 1950 1950-02-02 33 
## 3 3 12 1950 1950-12-03 337 
## 4 4 1 1951 1951-01-04 4 
## 5 5 2 1951 1951-02-05 36 
## 6 6 12 1951 1951-12-06 340 

優勢的是,它正常工作,即使你行的順序被改變,或者某一天失蹤。將分析依賴於數據的順序幾乎不是一個好主意。

4

假設你的數據集被命名爲df,你可以構建日期字段:

df$date <- as.Date(paste(df$Y, df$m, df$d, sep="-"), "%Y-%m-%d") 

然後使用從那個日期對象的%j屬性:

df$day_of_year <- as.numeric(strftime(df$date, "%j"))