使用R创建具有特定条件的未知数量的子集

时间:2013-06-11 00:50:53

标签: r subset

我仍然是R初学者,所以请善待:)。在未知时间和未知间隔时,我的数据中存在间隙。我想通过对它们进行子集化来从我的数据中提取这些空白。我不希望它们从数据框中删除,我只想要与数据间隙一样多的不同子集,以便我可以对它们进行更改并最终将更改的子集合并回原始数据框。此外,最终我将在多个.csv文件上运行此脚本的大部分内容,因此无法进行硬编码。我的数据样本如下,只有相关专栏:

fixType (column 9)

fix
fix
fix
fix
fix
fix
lastvalidfix
0
0
0
0
0
firstfix
fix
fix
fix
fix
lastvalidfix
0
0
0
0
0
0
0
0
0
0
firstfix

我现在的代码不起作用而且不完全正确R,但我希望它能表达我需要做的事情。基本上每次在第9列的行中找到lastvalidfix和firstfix时,我想创建一个包含这两行的子集,但是它们之间有很多行。如果使用上面的示例数据,那么我将创建2个子集,第一个有7行,第二个有12行。每个文件中的数据间隙数量各不相同,因此子集的数量和长度每次都可能不同。我意识到每个子集都需要一个唯一的名称,这就是我完成子集+1的原因。

subset <- 0 # This is my attempt at creating unique names for the subsets

for (i in 2:nrow(dataMatrix)) { # Creating new subsets of data for each time the     signal is lost
  if ((dataMatrix[i, 9] == "lastvalidfix") & 
     (dataMatrix[i, 9] == "firstfix")){
        subCreat <- subset(dataMatrix, dataMatrix["lastvalidfix":"firstfix", 9], subset + 1)
  }
}  

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

试试这个:

start.idx <- which(df$fixType == "lastvalidfix")
end.idx   <- which(df$fixType == "firstfix")
mapply(function(i, j) df[i:j, , drop = FALSE],
       start.idx, end.idx, SIMPLIFY = FALSE)

它将返回子data.frames或子矩阵列表。

(注意:我的df$fixType就是您所指的dataMatrix[, 9]。如果它有列名,我强烈建议您使用它。)