【问题标题】:Create an unknown number of subsets with specific conditions using R使用 R 创建具有特定条件的未知数量的子集
【发布时间】:2013-06-11 00:50:53
【问题描述】:

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

任何帮助将不胜感激。

【问题讨论】:

    标签: r subset


    【解决方案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)
    

    它将返回一个子数据帧或子矩阵的列表。

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

    【讨论】:

    • 非常感谢,这非常有效,我听从了您关于使用列名的建议。唯一的问题是它似乎循环了很长时间(可能是无限的),而且有时它似乎也以指定值以外的值开始和结束。关于为什么的任何想法?
    • 对不起,不是无限次的,但是当我认为它只需要一次时,它确实会多次循环矩阵。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-05
    • 2022-10-04
    • 2017-11-26
    • 1970-01-01
    • 2021-07-27
    • 1970-01-01
    相关资源
    最近更新 更多