返回基于布尔值的数字序列的更优雅的方法?

tcash21

这是我作为data.frame一部分的布尔值示例:

atest <- c(FALSE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, FALSE)

我想从每个FALSE返回一个从1开始并递增1直到下一个FALSE的数字序列。

所得的期望向量为:

[1]  1  2  3  4  5  6  7  8  9 10  1  2  3  4  5  6  7  8  9 10  1

这是完成此任务的代码,但是我敢肯定,有一种更简单或更优雅的方法可以在R中执行此操作。我一直在尝试学习如何在R中更有效地编写代码,而不是简单地完成工作。

result <- c()
x <- 1
for(i in 1:length(atest)){
    if(atest[i] == FALSE){
        result[i] <- 1
        x <- 1
    } 
    if(atest[i] != FALSE){
        x <- x+1
         result[i] <- x
    }
}
约书亚·乌尔里希(Joshua Ulrich)

这是使用方便(但不广为人知/使用)的基本功能的一种方法:

> sequence(tabulate(cumsum(!atest)))
 [1]  1  2  3  4  5  6  7  8  9 10  1  2  3  4  5  6  7  8  9 10  1

分解:

> # return/repeat integer for each FALSE
> cumsum(!atest)
 [1] 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3
> # count the number of occurrences of each integer
> tabulate(cumsum(!atest))
[1] 10 10  1
> # create concatenated seq_len for each integer
> sequence(tabulate(cumsum(!atest)))
 [1]  1  2  3  4  5  6  7  8  9 10  1  2  3  4  5  6  7  8  9 10  1

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

避免多个布尔值的优雅方法?

来自分类Dev

基于布尔值的排序列表

来自分类Dev

从方法返回布尔值

来自分类Dev

返回布尔值的序列图

来自分类Dev

如何基于返回布尔值的模型类上方法的结果来过滤查询集?

来自分类Dev

基于值返回颜色名称的优雅方法

来自分类Dev

SQL Where参数返回为数字而不是布尔值

来自分类Dev

如果两组共享数字,则返回布尔值

来自分类Dev

方法应返回布尔值,返回int

来自分类Dev

Web API不会将布尔返回值序列化为JSON布尔值

来自分类Dev

返回值为布尔值的方法

来自分类Dev

AlertDialog返回布尔值

来自分类Dev

Vuex返回布尔值?

来自分类Dev

布尔值的返回类型?

来自分类Dev

LINQ返回布尔值

来自分类Dev

布尔值和返回

来自分类Dev

从异步方法转换错误返回布尔值

来自分类Dev

C#从double []方法返回布尔值

来自分类Dev

获取Display方法以返回布尔值?-JavaFX

来自分类Dev

布尔值方法,如果方括号匹配,则返回true

来自分类Dev

Java-使布尔值isHigherGeneration()方法返回YES / NO

来自分类Dev

根据条件从方法返回布尔值或整数

来自分类Dev

C#从double []方法返回布尔值

来自分类Dev

停止方法链而不返回布尔值

来自分类Dev

如何使用返回布尔值的休眠编写方法

来自分类Dev

一种获取布尔值以表示1和-1的优雅方法

来自分类Dev

基于布尔值的线程阻塞

来自分类Dev

基于变量反转布尔值

来自分类Dev

基于布尔值隐藏键值对