2015-10-09 56 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"))