我在45年的时间跨度内提取每日温度数据。我使用了所有可能的方法来追加,cbind,将这些数据转化为每年循环增长的变量。 除了价值我还包括时间(as.Date)。不幸的是,我最后的变量由45行和2列组成,每个单元格包含值(左列)和日期(右列)。但是,我无法找到一种方法来“扩大”单元格,以获得每个单元格包含一个值的两列。将矩阵中的几个列表对象转换为实际列表
起初我试图从合并(,by ='date')循环中得到一个更好的变量,但它不工作,因为我只有一年的日期。 我正在寻找扩展单元格的命令,或者甚至更好,它将真正将循环内部的变量底部的两列(值为& date)附加为每个单元格的单个条目。
输入数据是带年份的文本文件(写有1960年的前导行,以及31 x 13矩阵)被写在彼此之下。 -9999是我的NA标志。
1960 - - - - - - - - - - - -
1 -22.2 -13.5 -6.2 -5.4 . . . x(1,13)
2 -22.4 -15.9 -5.7 7.6 . . . x(2,13)
.
.
.
31
30 -9.9 -9999 -8 4.8 . . . x(30,13)
31 -17 -9999 -6.2 . . . x(31,13)
1961 - - - - - - - - - - - -
1 -17.8 -22.6 -11.7 -0.5 4 11.9 10.4 14.8 12 -0.1 -9.2 -16.3
代码简化:
dat1 <- data.frame(read.table(filename))
dat1$NUM <- 1:length(dat1$V1) #I needed an index
TYs <- 1960 # Year start
TYe <- 2005 # Year end
TYi–TYs
TMP3 <- NULL #The variable that should store the data. Append new data every loop
while (TYi <= TYe){
index <- dat1$NUM[dat1$V1==TYi]
# get the start and stop of matrix indices
begin <- index+1
end <- begin+30
oddyear <-format(as.Date(paste('3112',TYi),'%d%m%Y'),'%j')== '366' #checks if TYi is oddyear
if (oddyear==TRUE){
date <- seq(as.Date(paste('0101',TYi), '%d%m%Y'),as.Date(paste('3112',TYi), '%d%m%Y'),'day')
TMP2 <- NULL
TMP2$data[1:31] <- TMP[1:31]
TMP2$data[32:60] <- TMP[32:60]
#...
TMP2$data[336:366] <- TMP[342:372]
TMP2$date <- date
TMP3 <- rbind(TMP3, TMP2)
TYi <- TYi+1
TMP2 <- NULL
TMP <- NULL
} else { # similar with one day less for non-oddyears
}
这就是我得到年底TMP3:
data date
TMP2 Character,366 Numeric,366
TMP2 Character,365 Numeric,365
TMP2 Character,365 Numeric,365
我想是这样的:
data date
-22.2 1960-01-01
-22.4 1960-02-01
...
干杯, 埃里克
你能告诉我们:你的初始数据是什么样的;你正在使用的代码;以及您的数据所需的最终格式?就目前而言......我不知道你做了什么,或者你是怎么做到的,或者为什么它错了! – Justin 2012-02-16 23:07:39