每年从1 - 365(366)开始按顺序增加数量

时间:2015-10-09 18:30:54

标签: r

我每天都有天气数据,其中包含当月,月,年和数据的列。但我需要在一年中添加另一列。 例如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")`

2 个答案:

答案 0 :(得分: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))

我们可以证实我们有366个:

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

答案 1 :(得分:4)

R有一个>>> d = { ... 'first': 'asdf', ... 'second': 'aaaa' ... } >>> [item[1] for item in sorted(d.items(), key=lambda x: x[0])] ['asdf', 'aaaa'] 类,这是一个很好的第一步;您可以通过将列粘贴为“Y-M-D”格式然后调用Date来实现。但是有一个更好的选择,即as.Date类,它包含您在POSIXlt字段中所需的信息,以及许多其他潜在的有用信息。那么我将Date转换为POSIXlt格式,并获得一年中的某一天;因为这从零开始,然后加1。

yday

这样做的好处是即使您的行的顺序发生更改或缺少特定日期,它也能正常工作。让分析依赖于数据的顺序几乎绝不是一个好主意。