我有一个非常大的文件,它只包含不同位置不同潮汐场景的波高。我的文件被组织成13个波浪高度x 9941个事件,用于5153个位置。
我想要做的是阅读这个非常长的数据文件,如下所示:
0.0
0.1
0.2
0.4
1.2
1.5
2.1
.....
然后将其分成长度为129,233的段(对应于特定位置的9941个事件的13个潮汐场景)。在该数据子集上,我希望执行一些统计函数来计算超越概率等。然后我将它连接到包含位置信息的文件,并打印一些输出文件。
到目前为止,我的代码无效,尽管我尝试过很多东西。它似乎很好地读取了数据,但它在拆分方面遇到了麻烦。我怀疑它可能与文件中输入数据的格式有关。
# read files with return period wave heights at defense points
#Read wave heights for 13 tides per 9941 events, for 5143 points
WaveRP.file <- paste('waveheight_test.out')
WaveRPtable <- read.csv(WaveRP.file, head=FALSE)
WaveRP <- c(WaveRPtable)
#colnames(WaveRP) <- c("WaveHeight")
print(paste(WaveRP))
#Read X,Y information for defense points
DefPT.file <- paste('DefXYevery10thpt.out')
DefPT <- read.table(DefPT.file, head=FALSE)
colnames(DefPT) <- c("X_UTM", "Y_UTM")
#Split wave height data frame by defense point
WaveByDefPt <- split(WaveRP, 129233)
print(paste(length(WaveByDefPt[[1]])))
for (i in 1:length(WaveByDefPt)/129233){
print(paste("i",i))
}
我也试过
#Split wave height data frame by defense point
WaveByDefPt <- split(WaveRP, ceiling(seq_along(WaveRP)/129233))
无论我如何执行拆分,我只是将原始数据作为一个长子集。任何帮助将不胜感激!
谢谢:) 金佰利
答案 0 :(得分:1)
尝试cut
来构建群组:
v <- as.numeric(readLines(n = 7))
0.0
0.1
0.2
0.4
1.2
1.5
2.1
groups <- cut(v, breaks = 3) # you want breaks = 129233
aggregate(x = v, by = list(groups), FUN = mean) # e.g. means per group
# Group.1 x
# 1 (-0.0021,0.699] 0.175
# 2 (0.699,1.4] 1.200
# 3 (1.4,2.1] 1.800
答案 1 :(得分:1)
您可以将数据转换为各种数据类型。
最初读取文件时,它是一个包含1列(V1)的数据帧。然后将其传递给c()
,这会产生一个包含单个向量的列表。这意味着如果您尝试对WaveRP
执行任何操作,您可能会失败,因为这是列表的名称。数字向量为WaveRP[[1]]
。
相反,只需使用$
运算符提取数字向量,然后就可以使用它。或者只是在数据框内使用它。有趣的部分将考虑创建分组向量的方法。我举一个例子。
这样的事情:
WaveRP.file <- paste('waveheight_test.out')
WaveRPtable <- read.csv(WaveRP.file, head=FALSE)
WaveRPtable$group <- ceiling(seq_along(WaveRPtable$V1)/129233)
SplitWave <- split(WveRPtable,WaveRPtable$group)
现在您将拥有一个包含13个数据帧的列表。使用双括号索引查看每个。例如,SplitWave[[2]]
来查看第二组。您可以单独将位置信息文件与这些数据框合并。