我每天都有天气数据,其中包含当月,月,年和数据的列。但我需要在一年中添加另一列。 例如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")`
答案 0 :(得分:4)
尝试此代码,假设您的“年”列名为“V3”:
编辑:更严重的是,粘贴数据图片是一个坏主意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
这样做的好处是即使您的行的顺序发生更改或缺少特定日期,它也能正常工作。让分析依赖于数据的顺序几乎绝不是一个好主意。