r - 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 条件
解决方案
取绝对值,反转输入并取累积和。最后将 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
推荐阅读
- java - 如何重置 int 值
- python - 为什么我的 QThreads 总是让 Maya 崩溃?
- python - 在 postgreSQL 中通过烧瓶创建数据库
- javascript - 将文本流从 NodeJS 传递到浏览器
- mysql - TIMESTAMPDIFF from particular timezone
- javascript - Highcharts:如何格式化 x 轴,以便表格中的实际日期/时间出现在每个 y 上
- javascript - Angular/Cordova:Android 设备上的 MIME 类型问题
- node.js - `fs.readFile` 是否等同于 `setTimeout(fs.readFileSync)`?
- hyperledger-fabric - 如何为结构 CA 使用加密配置文件
- python - FileNotFoundError:[Errno 2] 文件 b'smallsample.csv' 不存在:b'smallsample.csv'