首页 > 解决方案 > R:如何设置 if 语句条件仅在整列等于一个值时触发?

问题描述

假设我有一个数据框列表。在每个数据框中,有一个列,我想在其中创建一个新的虚拟列。这就是它的工作原理。为简单起见,让我们在示例中只使用向量而不是数据框。

vect<-c(0, 0, 100, 100, 0, 0)

在这种情况下,创建的虚拟列如下:

dummy_vect<- c(0, 0, 0, 0, 1, 1)

dummy 基本上只出现在索引中,仅在 vect 中的最后一个值之后。我编写了执行此操作的代码,并且它可以正常工作。我遇到的大问题发生在所有 vect 均为 0 的极少数情况下

vect<-c(0,0,0,0,0,0)

对于问题的上下文,当这种情况发生时,我需要虚拟列在每个实例中都为 1。

我如何将其翻译成代码?因此,如果 vect 中的每个值都是 0,则在虚拟列中返回所有 1,否则只需执行我编写的适用于其他情况的代码。任何帮助是极大的赞赏!这可能很简单,我只是想多了,但我根本不知道如何正确设置 if 条件

标签: r

解决方案


取绝对值,反转输入并取累积和。最后将 0 值更改为 TRUE,反转并转换为数字。

vect <- c(0, 0, 100, 100, 0, 0)

+rev(cumsum(rev(abs(vect))) == 0) 
## [1] 0 0 0 0 1 1

+rev(cumsum(rev(abs(0*vect))) == 0)   # 0*vect is all 0 input
## [1] 1 1 1 1 1 1

推荐阅读