【问题标题】:Looping over the first 100 values then looping over the next 100 values循环遍历前 100 个值,然后遍历接下来的 100 个值
【发布时间】:2019-08-30 16:47:24
【问题描述】:

我有一个 True 和 False 值的向量。向量长度为​​1000。

vect <- [T T F T F F..... x1000]

我想遍历前 100 个(即 1:100)值并计算真假值的计数并将结果存储到某个变量中(例如 True

下面的代码非常标准,但是它不是对向量进行切片,而是计算整个向量的总和。

count_True = 0
count_False = 0
for (i in vect){
    if (i == 'T'){
        count_True = count_True + 1
    }
    else {
        count_false = count_false + 1
    }
}

我知道您可以将向量拆分为

vect_splt <- split(vect,10)

但是有没有办法将这些结合起来做我想做的事或任何其他方式?

【问题讨论】:

    标签: r vector split


    【解决方案1】:

    我们可以通过table 使用split。使用gl 创建的分组索引,splitvector 转换为listvectors 并使用table 获取计数并将其存储在list

    out <- lapply(split(vect, as.integer(gl(length(vect), 100, length(vect)))), table)
    

    可以通过rbinding 转换为单个数据集

    out1 <- do.call(rbind, out)
    

    数据

    set.seed(24)
    vect <- sample(c(TRUE, FALSE), 1000, replace  = TRUE)
    

    【讨论】:

      【解决方案2】:

      这样的工作是否有效:

      set.seed(42)
      vect <- sample(rep(c(T, F), 500))
      
      vect <- tibble(vect)
      vect %>%
        mutate(seq = row_number() %/% 100) %>%
        group_by(seq) %>%
        summarise(n_TRUE = sum(vect),
                  n_FALSE = sum(!vect))
      # A tibble: 11 x 3
           seq n_TRUE n_FALSE
         <dbl>  <int>   <int>
       1     0     42      57
       2     1     56      44
       3     2     50      50
       4     3     55      45
       5     4     43      57
       6     5     48      52
       7     6     48      52
       8     7     54      46
       9     8     51      49
      10     9     53      47
      11    10      0       1
      

      【讨论】:

      • 谢谢。我有另一个数据集(TP,TN,FP,FN,.... x 1000)。可以做类似的事情来计算每 100 个数据点的一些 TP、TN、FP、FN 吗? TP:真阳性 TN:真阴性 FP:假阳性 FN:假阴性
      • 您可以在group_by 部分中使用该字段并使用n() 进行计数总结
      猜你喜欢
      • 2021-10-28
      • 2022-01-24
      • 2021-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-26
      • 2015-07-26
      • 2015-07-13
      相关资源
      最近更新 更多