基本上,我正在查看积雪数据。我希望在10月15日到次年5月15日(当然是冬季)〜215天期间为每个日期(第" snowday")分配一个唯一值。然后添加一个专栏" snowmonth"这对应于季节性数据的连续月份,以及“雪年”#34;表示每个季节性记录开始年份的列。
但是有一些缺失的日期 - 但是 - 不是找到那些日期并将NA插入行中,而是选择跳过该步骤而是去顺序根,然后可以用尊重" snowmonth"
基本上,我只需要得到" snowday"大约1:215的序列(列中的闰年为+1,其余的我可以自己做。看起来像这样
month day year depth date yearday snowday snowmonth
12 26 1955 27 1955-12-26 360 NA NA
12 27 1955 24 1955-12-27 361 NA NA
12 28 1955 24 1955-12-28 362 NA NA
12 29 1955 24 1955-12-29 363 NA NA
12 30 1955 26 1955-12-30 364 NA NA
12 31 1955 26 1955-12-31 365 NA NA
1 1 1956 25 1956-01-01 1 NA NA
1 2 1956 25 1956-01-02 2 NA NA
1 3 1956 26 1956-01-03 3 NA NA
man<-data.table()
man <- read.delim('mansfieldstake.txt',header=TRUE, check.names=FALSE)
man[is.na(man)]<-0
man$date<-paste(man$yy, man$mm, man$dd,sep="-", collapse=NULL)
man$yearday<-NA #day of the year 1-365
colnames(man)<- c("month","day","year","depth", "date","yearday")
man$date<-as.Date(man$date)
man$yearday<-yday(man$date)
man$snowday<-NA
man$snowmonth<-NA
man[420:500,]
head(man)
输出看起来像这样:
month day year depth date yearday snowday snowmonth
12 26 1955 27 1955-12-26 360 73 3
12 27 1955 24 1955-12-27 361 74 3
12 28 1955 24 1955-12-28 362 75 3
12 29 1955 24 1955-12-29 363 76 3
12 30 1955 26 1955-12-30 364 77 3
12 31 1955 26 1955-12-31 365 78 3
1 1 1956 25 1956-01-01 1 79 4
1 2 1956 25 1956-01-02 2 80 4
1 3 1956 26 1956-01-03 3 81 4
我已经考虑了循环以及所有这些 - 但它效率低下......闰年有点混乱 - 这比我想象的更具挑战性。不错的第一个项目!
在这里寻找一个简单的序列,放弃所有非雪月。感谢任何有输入的人!
答案 0 :(得分:0)
如果我理解正确snowday
应该是自季节开始以来的天数,那么使用data.table
制作此专栏所需的全部内容是:
day_one <- as.Date("1955-10-01")
man[, snowday := -(date - day_one)]
如果您想要的只是一系列唯一值,那么seq()
是您最好的选择。
然后您可以使用
创建snowmonth
library(lubridate)
man[, snowmonth := floor(-time_length(interval(date, day_one), unit = "month"))