python - 有没有办法在 python/rpy2 中访问 R 数据框列名?

标签 python r rpy2

我有一个 R 数据框,保存在 Database02.Rda 中。加载中

import rpy2.robjects as robjects
robjects.r.load("Database02.Rda")

工作正常。然而:

print(robjects.r.names("df"))

产量

NULL

此外,例如,第 214 列(如果我们从 0 开始计数,则为 213)被命名为 REGION。

print(robjects.r.table(robjects.r["df"][213]))

工作正常:

Region 1   Region 2   ...
    9811       3451   ...

但我们应该也能做到

print(robjects.r.table("df$REGION"))

然而,这会导致

df$REGION 
        1

(它也适用于根本不存在的列名);还有:

print(robjects.r.table(robjects.r["df"]["REGION"]))

报错:

TypeError: SexpVector indices must be integers, not str

现在,docs比如说,名称不能用于 python 中的子集化。我是否正确地假设在使用 python/rpy2 加载数据框时列名没有与其余数据一起导入?因此,我是否正确认为访问它们的最简单方法是将它们作为单独的列表保存和加载,并在 python 中构造一个 dict 左右,将名称映射到列索引号?然而,这似乎不是很通用。有没有办法直接提取列名?

我使用的R、python、rpy2的版本是: 回复:3.2.2 python :3.5.0 rpy2: 2.7.8

最佳答案

执行以下操作时,您正在将 Database02.Rda 中的任何对象加载到 R 的“全局环境”中。

import rpy2.robjects as robjects
robjects.r.load("Database02.Rda")

robjects.globalenv 是一个 Environement .您可以列出其内容:

tuple(robjects.globalenv.keys())

现在我了解到您的对象之一称为 df。您可以通过以下方式访问它:

df = robjects.globalenv['df']

如果 df 是列表或数据框,您可以访问其命名元素 rx2(这里又是 the doc is your friend)。要获取名为 REGION 的区域,请执行以下操作:

df.rx2("REGION")

列出列表或数据框中的所有命名元素很容易:

tuple(df.names) 

关于python - 有没有办法在 python/rpy2 中访问 R 数据框列名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35781624/

相关文章:

python - 如何限制我的子弹射程?

r - 重载S3通用加法和乘法函数

python - rpy2代码可以并行运行吗?

python - 在 python 中使用 pickle 时内存泄漏

python - 在 DataFrame 中的新标题列下嵌套列

python - 将 csv 文件加载到 pandas 数据框中

python - 在 Python 2.7 中除以 float 时获取商

r - 如何在不使用 print() 的情况下打印函数的结果?

performance - R 中的高性能大数据处理

python - 如何将 R_HOME 环境变量设置为 R 主目录?