在简单的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
答案 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]