使用 rpy2 省略 NA 行
Omit NA rows with 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>
的行时,它只会找到每一行。当我搜索 "" 而不是 "<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
您可以 运行 任何 R 代码使用 rpy2.robjects
:
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)')
为了将来参考,您可以调用带有句点“.”的 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]
这在纯 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>
的行时,它只会找到每一行。当我搜索 "" 而不是 "<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
您可以 运行 任何 R 代码使用 rpy2.robjects
:
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)')
为了将来参考,您可以调用带有句点“.”的 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]