R:如何将行和列的每日时间序列安排为单个列?
我有一个数据集,一个每日时间序列,我想排列成一列,这是我的数据:R:如何将行和列的每日时间序列安排为单个列?,r,time,time-series,organization,R,Time,Time Series,Organization,我有一个数据集,一个每日时间序列,我想排列成一列,这是我的数据: Date Day 1 Day 2 Day 3 Day 4 Day 5 Day 6 .... Day 31 01/01/1964 0 0 0 0 0 0 3 01/02/1964 NA NA NA NA NA NA ... 01/0
Date Day 1 Day 2 Day 3 Day 4 Day 5 Day 6 .... Day 31
01/01/1964 0 0 0 0 0 0 3
01/02/1964 NA NA NA NA NA NA ...
01/03/1964 195 445 329 121 61,6 44 ...
01/04/1964 17,2 14,9 17,1 102 54,3 9,33 ...
我想要这个:
Day1 0
Day2 0
.
.
.
Day31 3
我有问题,因为闰年有366天,我尝试了这个,但没有成功,在先进的感谢
编辑:
我终于得到了它,但如果有人知道更简单的方法,使用一些包或函数,我很感激。或者我将创建自己的函数。
rm(list = ls())
cat("\014")
setwd("C:/")
require(XLConnect)
# Load Streamflow Gauging Station
wb <- loadWorkbook("rainfall.xls")
Data<- readWorksheet(wb, sheet = "rainfall",header = FALSE,region = "B02:AF517")
R<- Data; ##1964 - 2006
sum(R[is.na(R)==FALSE])
# Number of days in each month
Ny<- c(31,28,31,30,31,30,31,31,30,31,30,31); # Normal Year
Ly<- c(31,29,31,30,31,30,31,31,30,31,30,31); # Leap/bissextile Year
S1<- c(1,0,0,0) # Leap year, normal year...
S2<- c(0,1,0,0) # Normal year, leap year...
S3<- c(0,0,1,0) #...
S4<- c(0,0,0,1) #...
Iab<- rep(S1,times=ceiling((nrow(R)/12)/4)); # Index of years
Iab<- Iab[1:(nrow(R)/12)];
Rnew<- matrix(numeric(0), 0,0);
#Organize data in a only collumn
for(i in 1:(nrow(R)/12)){
for(j in 1:12){
if(Iab[i]==0){
Rnew<-c(Rnew, t(R[12*(i-1)+j,1:Ny[j]]))
}else{
Rnew<-c(Rnew, t(R[12*(i-1)+j,1:Ly[j]]))
}
}
}
sum(R[is.na(R)==FALSE])==sum(Rnew[is.na(Rnew)==FALSE]) #Test for succes of organize
sum(R[is.na(R)==FALSE])
sum(Rnew[is.na(Rnew)==FALSE])
编辑2:
现在我有一个问题,在一年的第一个月我没有开始工作。
rm(list = ls())
cat("\014")
setwd("C:/")
require(XLConnect)
# Load Streamflow Gauging Station
wb <- loadWorkbook("rainfall.xls")
Data<- readWorksheet(wb, sheet = "rainfall",header = FALSE,region = "B02:AF517")
R<- Data; ##1964 - 2006
sum(R[is.na(R)==FALSE])
# Number of days in each month
Ny<- c(31,28,31,30,31,30,31,31,30,31,30,31); # Normal Year
Ly<- c(31,29,31,30,31,30,31,31,30,31,30,31); # Leap/bissextile Year
S1<- c(1,0,0,0) # Leap year, normal year...
S2<- c(0,1,0,0) # Normal year, leap year...
S3<- c(0,0,1,0) #...
S4<- c(0,0,0,1) #...
Iab<- rep(S1,times=ceiling((nrow(R)/12)/4)); # Index of years
Iab<- Iab[1:(nrow(R)/12)];
Rnew<- matrix(numeric(0), 0,0);
#Organize data in a only collumn
for(i in 1:(nrow(R)/12)){
for(j in 1:12){
if(Iab[i]==0){
Rnew<-c(Rnew, t(R[12*(i-1)+j,1:Ny[j]]))
}else{
Rnew<-c(Rnew, t(R[12*(i-1)+j,1:Ly[j]]))
}
}
}
sum(R[is.na(R)==FALSE])==sum(Rnew[is.na(Rnew)==FALSE]) #Test for succes of organize
sum(R[is.na(R)==FALSE])
sum(Rnew[is.na(Rnew)==FALSE])
rm(list=ls())
类别(“\014”)
setwd(“C:/”)
需要(XLConnect)
#负荷流量测量站
wb也许我很难准确地理解你在寻找什么,但你是否在尝试转换数据
t(data)
我也有类似的问题。然而,更糟糕的是,因为我有流量数据(巴西利亚全日空站),有几个月和几年的中断。Vazao01代表当月第一天的流量,Vazao02代表第二天的流量,数据帧上升至Vazao31(天数较少的月份明显为NA,但也可以是现有天数的NA,无记录)。数据如下所示,即data.frame“ANAday”
我列出了一个月的数据清单
ANAm=as.Date(ANAday[,1], format="%d.%m.%Y")
format(ANAm, format="%Y-%m")
然后我使用Hmisc包的“monthDays”功能列出每个月的天数
require(Hmisc)
nodm=monthDays(ANAm)
Nodm=cbind.data.frame(ANAm,nodm)
for(i in 1:nrow(Nodm)){
selectANA=as.vector(ANAd[i,1:(Nodm[i,2]) ])
selectANA=as.vector(t(selectANA))##to generate a simple vector
dayANA=c(1:(Nodm[i,2]))
monthANA=rep(format(as.Date(Nodm[i,1]),format="%Y-%m"),times=as.numeric(Nodm[i,2]))
ANAts=cbind(monthANA,dayANA,auswahlANA)
ANATS<<-rbind(ANATS,ANAts)
}
我为我想要的数据准备了一个data.frame,其中有3列分别是“年-月”、“日”和“出院”
并使用一个简单的“for”循环,根据每个月的天数将数据提取到一列中
require(Hmisc)
nodm=monthDays(ANAm)
Nodm=cbind.data.frame(ANAm,nodm)
for(i in 1:nrow(Nodm)){
selectANA=as.vector(ANAd[i,1:(Nodm[i,2]) ])
selectANA=as.vector(t(selectANA))##to generate a simple vector
dayANA=c(1:(Nodm[i,2]))
monthANA=rep(format(as.Date(Nodm[i,1]),format="%Y-%m"),times=as.numeric(Nodm[i,2]))
ANAts=cbind(monthANA,dayANA,auswahlANA)
ANATS<<-rbind(ANATS,ANAts)
}
不管用。我需要将每一行月份与31/31/28/29天进行转换,以形成一个单独的列,我有NA值,其中月份少于31天,并且缺少值。在每个循环中,需要知道要转置的向量长度、一个月的天数以及是闰年还是正常年份。嗨,Johanna!我来自巴西!我的问题还涉及ANA timeseries。你是巴西人吗?这个问题有点老了,8个月前,现在我找到了解决这个问题的方法,甚至创建了一个R包。但是,您的代码是有意义的,并且可以处理问题类型。