2015-04-07 93 views
0

这会很容易在普通R.对于数据帧名为计数和一个名为HGNC这将是本专栏:与rpy2省略NA行

counts <- na.omit(hgnc) 

如何实现rpy2同样的事情?据我所知,似乎没有na_omit函数。

我试图基于字段是否"<NA>"选择,但我得到了令人抓狂的结果不一致:

print r.dim(counts) 
[ 63677,  12] 
print r.dim(counts.rx(counts.rx2('hgnc').ro == "<NA>", True)) 
[1] 6672 12 
print r.dim(counts.rx(counts.rx2('hgnc').ro != "<NA>", True)) 
[1] 63677 12 

注意,它发现含有<NA>与==行,但后来当我搜索的行不包含<NA>它只是发现每一行。同样不会发生了,当我搜索“”,而不是"<NA>"

print r.dim(counts.rx(counts.rx2('hgnc').ro == "", True)) 
[1] 27979 12 
print r.dim(counts.rx(counts.rx2('hgnc').ro != "", True)) 
[1] 42370 12 

回答

1

可以使用rpy2.robjects运行任何R代码里面:

import rpy2.robjects as ro 

# R SCRIPT 
ro.r.source('yourRscript.R') 

# R DATA FRAME 
ro.globalenv['counts'] 

# OMIT NA ROWS 
ro.r('na.omit(counts$hgnc)') 
+0

哇我希望这种语法风格在rpy2文档中更加突出。这比我一直试图做的更清洁和更容易。谢谢你包括额外的行,可笑的帮助。 – sage88

0

对于未来的参考,你可以调用具有R功能一段时间 ”。”在名称中使用ro.r("na.omit")(...),其中...是一个python变量列表。例如:

In [1]: from rpy2 import robjects as ro 

In [2]: x = ro.r("c(1,2,NA)") 

In [3]: x 
Out[3]: 
<FloatVector - Python:0x1073ab758/R:0x7fbafba8b520> 
[1.000000, 2.000000, NA_real_] 

In [4]: ro.r("na.omit")(x) 
Out[4]: 
<FloatVector - Python:0x1073b3f80/R:0x7fbafaa415f8> 
[1.000000, 2.000000]