小编Anu*_*nuj的帖子

如何加速R data.table中缺少的搜索过程

我正在编写缺失值处理的一般功能.数据可以包含Char,numeric,factor和integer类型的列.数据的示例如下

dt<-data.table(
  num1=c(1,2,3,4,NA,5,NA,6),
  num3=c(1,2,3,4,5,6,7,8),
  int1=as.integer(c(NA,NA,102,105,NA,300,400,700)),
  int3=as.integer(c(1,10,102,105,200,300,400,700)),
  cha1=c('a','b','c',NA,NA,'c','d','e'),
  cha3=c('xcda','b','c','miss','no','c','dfg','e'),
  fact1=c('a','b','c',NA,NA,'c','d','e'),
  fact3=c('ad','bd','cc','zz','yy','cc','dd','ed'),
  allm=as.integer(c(NA,NA,NA,NA,NA,NA,NA,NA)),
  miss=as.character(c("","",'c','miss','no','c','dfg','e')),
  miss2=as.integer(c('','',3,4,5,6,7,8)),
  miss3=as.factor(c(".",".",".","c","d","e","f","g")),
  miss4=as.factor(c(NA,NA,'.','.','','','t1','t2')),
  miss5=as.character(c(NA,NA,'.','.','','','t1','t2'))  
)
Run Code Online (Sandbox Code Playgroud)

我正在使用此代码标记缺少的值:

dt[,flag:=ifelse(is.na(miss5)|!nzchar(miss5),1,0)]
Run Code Online (Sandbox Code Playgroud)

但事实证明它非常慢,另外我必须添加逻辑,也可以考虑"." 失踪.所以我打算写这个用于缺失值识别

dt[miss5 %in% c(NA,'','.'),flag:=1]
Run Code Online (Sandbox Code Playgroud)

但是在一个600万的记录集中,这需要接近1秒来运行

dt[!nzchar(miss5),flag:=1]  takes close 0.14 secod to run.
Run Code Online (Sandbox Code Playgroud)

我的问题是,我们能否有一个代码,其中所花费的时间尽可能少,而我们可以查找值NA,空白和Dot(NA,".","")缺失?

任何帮助都非常感谢.

r data.table

7
推荐指数
1
解决办法
122
查看次数

sapply的并行版本

我们是否有并行版本的 sapply,因为我们在并行包中有 mclapply,它是 lapply 的一个版本。

parallel-processing r

7
推荐指数
2
解决办法
3288
查看次数

cbind包含数据表和数据框

我有关于数据表和数据框中的cbind特性的查询.如果我绑定数据帧(df)和数据表(dt),则结果对象的类取决于第一个参数.

例:

> dt<-data.table(x=c(1,2,3),y=c(2,3,4),z=c(3,4,5))
> df<-data.frame(x=c(1,2,3),y=c(2,3,4),z=c(3,4,5))
> dt
   x y z
1: 1 2 3
2: 2 3 4
3: 3 4 5
Run Code Online (Sandbox Code Playgroud)

案例1 :(第一个参数作为数据框)

>test_df<-cbind(df,dt)
>class(test_df)
[1] "data.frame"
Run Code Online (Sandbox Code Playgroud)

案例2 :(第一个参数作为数据表)

>test_dt<-cbind(dt,df)
>class(test_dt)
[1] "data.table" "data.frame"
Run Code Online (Sandbox Code Playgroud)

所以,我的问题是如何在两种不同的情况下将输出对象作为数据表和数据框来获取,其中cbind没有data.table方法.

在合并函数中很清楚,R根据第一个参数调用不同的合并函数(如果第一个参数是它调用的数据帧,数据帧,如果是数据表,则调用合并的数据表方法).

对任何语法错误道歉,如果这是一个重复的问题,请告诉我.

谢谢.

r dataframe cbind data.table

5
推荐指数
1
解决办法
8386
查看次数

R数据表中较慢ifelse的替代方案

我正在编写一个函数,其中多个ifelse用于数据表操作.虽然我使用数据表来提高速度但是多个ifelse使我的代码变慢并且此功能适用于大型数据集.因此,我想知道iflese是否有替代品.来自函数的一个示例iflese(接近15 iflese),在此示例中,如果x为空,则将flag设置为1,否则为0.

    dt<-dt[,flag:=ifelse(is.na(x)|!nzchar(x),1,0)]
Run Code Online (Sandbox Code Playgroud)

performance if-statement r data.table

4
推荐指数
1
解决办法
827
查看次数