用rpy2省略NA行

时间:2015-04-07 00:47:05

标签: python r na rpy2

在简单的R中这很容易。对于名为counts的数据框和名为hgnc的列,它将是:

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>的行时,它会找到每一行。当我搜索&#34;&#34;时,情况也不会发生。而不是"<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

2 个答案:

答案 0 :(得分: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)')

答案 1 :(得分:0)

为了将来参考,您可以调用具有句点&#34;的R函数。&#34;在名称中使用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]