我有11640行的时间系列数据,其中每一行都是在某个特定小时测得的水位。 我需要一个代码,使我的列具有watertable值(我的数据集中某个列的名称是:" Watertable")并将其放入Matrix中的不同列。 " Watertable"中的列包含从0到超过100的深度值。我只对1到120厘米的值感兴趣。
我创建了具有相同行长度(即11640行)和120列的矩阵,其中每列代表表面下方的深度(例如,列35(名为X35)表面下方35厘米)(所有列名称均为1到1) 120在数字前面有一个X:X1,X2,X3,X4 ...... X119,X120)。 现在我想把我的价值观放在我的水资源" Watertable"进入我矩阵中的相应列。
如果" Watertable"某一行的值是58.我想让我的matrox中58和更高的所有列设置为1(而较低的列设置为NA或0)。 OBS!由于我的数据有十进制值,我想"四舍五入"如果.5和"向下舍入"如果< .5 ---> 50.56781 = 51和50.34369 = 50
" Watertable"数据:
> head(DATA1)
DATE_TIME Watertable
1 2014-06-14 00:00:00 50.80874
2 2014-06-14 01:00:00 50.04499
3 2014-06-14 02:00:00 50.02677
4 2014-06-14 03:00:00 51.01249
5 2014-06-14 04:00:00 51.04969
6 2014-06-14 05:00:00 51.56349
我想要的是什么:
Date X1 ... X50 X51 ...
2014-06-14 00:00:00 NA or 0 NA or 0 1 1 1
2014-06-14 01:00:00 NA or 0 NA or 0 1 1 1
2014-06-14 02:00:00 NA or 0 NA or 0 1 1 1
2014-06-14 03:00:00 NA or 0 NA or 0 NA or 0 1 1
2014-06-14 04:00:00 NA or 0 NA or 0 NA or 0 1 1
2014-06-14 05:00:00 NA or 0 NA or 0 NA or 0 NA or 0 1
我的矩阵中还有一个包含日期和时间的列,因为我认为我的代码中需要一个
我的矩阵代码:
WT_U_mtx= matrix(NA, nrow=11640, ncol=101, byrow=FALSE)
s= seq(from=0, to=100, by=1)
colnames(WT_U_mtx) = s
WT_U_mtx= as.data.frame(WT_U_mtx)
names(WT_U_mtx) <- sub("", "X", names(WT_U_mtx))
WT_U_mtx= cbind(WT_U_mtx, DATA[,"DATE_TIME"])
查看原始矩阵
tbl_df(WT_U_mtx) 资料来源:本地数据框[11,640 x 122]
X0 X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11
1 NA NA NA NA NA NA NA NA NA NA NA NA
2 NA NA NA NA NA NA NA NA NA NA NA NA
3 NA NA NA NA NA NA NA NA NA NA NA NA
4 NA NA NA NA NA NA NA NA NA NA NA NA
5 NA NA NA NA NA NA NA NA NA NA NA NA
6 NA NA NA NA NA NA NA NA NA NA NA NA
7 NA NA NA NA NA NA NA NA NA NA NA NA
8 NA NA NA NA NA NA NA NA NA NA NA NA
9 NA NA NA NA NA NA NA NA NA NA NA NA
10 NA NA NA NA NA NA NA NA NA NA NA NA
... ... ... ... ... ... ... ... ... ... ... ... ...
Variables not shown: X13 (lgl),X14 (lgl),X15 (lgl),X16 (lgl),X17 (lgl),
X18 (lgl), X19 (lgl), X20 (lgl), ..., X120 (lgl), DATA[, "DATE_TIME"] (time)
我的尝试:我实际上不知道如何编写代码,我一直在互联网上寻找各种问题(包括stackoverflow上的其他问题)。我想我想要某种&#34;如果&#34;功能。如果问题在结构上不清楚或不正确,我很抱歉,我是这个网页的新秀和整个Rstudio。
感谢我能得到的所有帮助! /艾琳
答案 0 :(得分:0)
弥补数据:
dd <- read.csv(text="
time,water.table
2014-06-14 00:00:00,50.80874
2014-06-14 01:00:00,50.04499
2014-06-14 02:00:00,50.02677
2014-06-14 03:00:00,51.01249
2014-06-14 04:00:00,51.04969
2014-06-14 05:00:00,51.56349")
dd$time <- as.POSIXct(dd$time)
拼凑矩阵:
maxlen <- 120
r <- round(dd$water.table)
m <- sapply(r,function(x) rep(0:1,c(x-1,maxlen-x+1)))
m <- t(m)
检查:
dim(m) ## 6 120
apply(m==0,1,sum) ## number of zeros in each row
## [1] 50 49 49 50 50 51
联合:
dd2 <- data.frame(dd,m)