2015-04-07 47 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]