在data.table中替代ifelse

阿隆·哈赞(Alon Hazan)

我有两个非常大的data.table:A和B。下面的代码可以正常工作,但是速度很慢。

temp2=ifelse(is.na(A) & is.na(B),FALSE,
               ifelse(!is.na(A) & is.na(V),TRUE,
                      ifelse(is.na(A) & !is.na(B),FALSE,
                             ifelse(A!=B,TRUE,FALSE))))

有没有更好的选择,因此代码可以更快地运行?

米格里布

由于您只需要返回“ true”或“ false”,因此似乎根本不需要使用ifelse。

如果我正确地阅读本(假设你的意思乙不是V),那么无论什么时候ANA,你要false回来,不管B的价值。因此,为了true要返回,A绝对不能NA接下来,为了true返回,A不能等于B。但是,如果BNANA则将从test返回A != B并且,如果BNA,但A不是,那么您想要TRUE,所以:

temp2 = (!is.na(A))&((A!=B)|is.na(B))

应该做到的。如果您的意思是V,那么您有三个data.tables?

关于时间

require(data.table)

A<- data.table(v1=sample(c(1,2,NA),1e6,replace=TRUE),v2=sample(c(1,2,NA),1e6,replace=TRUE))
B<- data.table(v1=sample(c(1,2,NA),1e6,replace=TRUE),v2=sample(c(1,2,NA),1e6,replace=TRUE))

system.time({temp1 = (!is.na(A))&((A!=B)|(is.na(B)))})
##   user  system elapsed 
##   0.41    0.00    0.41

system.time({temp2 =ifelse(is.na(A) & is.na(B),FALSE,
                                       ifelse(!is.na(A) & is.na(B),TRUE,
                                              ifelse(is.na(A) & !is.na(B),FALSE,
                                                     ifelse(A!=B,TRUE,FALSE))))})
##   user  system elapsed 
##   2.56    0.11    2.68 

all.equal(temp1,temp2)
## true

因此,其速度提高了约6倍。

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

ifelse(在data.table中)如何工作

来自分类Dev

data.table(R)中的ifelse行为

来自分类Dev

data.table 中 dcast 的替代方法?

来自分类Dev

内联ifelse分配在data.table中

来自分类Dev

在R中的data.table中使用ifelse分配值

来自分类Dev

data.table中plyr :: mapvalues的替代方法

来自分类Dev

ifelse具有在data.table R中创建新变量的多个条件

来自分类Dev

R:使用ifelse函数中“()”内的逻辑语句在data.table中分配变量

来自分类Dev

R:使用ifelse函数中“()”内的逻辑语句在data.table中分配变量

来自分类Dev

R Data.Table多重分配IfElse

来自分类常见问题

R data.table-替代lapply?

来自分类Dev

R data.table-替代lapply?

来自分类Dev

替代(m)获取data.table函数

来自分类Dev

在ifelse R data.table中使用apply

来自分类Dev

具有多列的data.table ifelse

来自分类Dev

R中嵌套ifelse语句的替代方法

来自分类Dev

R中多个ifelse的替代方案

来自分类Dev

R中多个ifelse的替代方法

来自分类Dev

基于R?中ifelse条件的data.frame列的总和?

来自分类Dev

替代R中的data.tables函数-因子的整数变量

来自分类Dev

PHP中许多ifelse语句的替代解决方案

来自分类Dev

嵌套在熊猫中的ifelse替代品

来自分类Dev

在data.table中使用ifelse每组选择一行

来自分类Dev

多个条件下的data.table ifelse不返回期望的输出

来自分类Dev

如何使用data.table / tidyverse公式功能的替代方法来汇总丢失的数据?

来自分类Dev

如何从data.table中的`.BY`中受益?

来自分类Dev

ifelse for循环的高效替代方案

来自分类Dev

ifelse for循环的高效替代方案

来自分类Dev

更新data.table中的向量