1

我仍然是 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)
  }
}  

非常感激任何的帮助。

4

1 回答 1

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)

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

(注意: mydf$fixType就是你所说的dataMatrix[, 9]。如果它有一个列名,我强烈建议你使用它。)

于 2013-06-11T01:05:31.247 回答