在R中拆分数据并执行操作

时间:2014-08-05 20:44:40

标签: r split

我有一个非常大的文件,它只包含不同位置不同潮汐场景的波高。我的文件被组织成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))

无论我如何执行拆分,我只是将原始数据作为一个长子集。任何帮助将不胜感激!

谢谢:) 金佰利

2 个答案:

答案 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]]来查看第二组。您可以单独将位置信息文件与这些数据框合并。