rpy2 如何将 R 数据帧分配给 value/values
rpy2 How to assign R dataframe to value/values
如果我有一个 python 数据帧转换为 r 数据帧:
设置
import rpy2.robjects as ro
from rpy2.robjects.vectors import ListVector, DataFrame
from rpy2.robjects import numpy2ri, pandas2ri
from rpy2.robjects.conversion import localconverter
from rpy2.robjects.packages import importr
base = importr("base")
### do not activate rpy2.robjects.numpy2ri.activate() or pandas2ri
基地看起来像
base
rpy2.robjects.packages.Package as a <module 'base'>
with localconverter(ro.default_converter + pandas2ri.converter):
r_df = ro.conversion.py2rpy(df)
如何将列更新为新的数据类型?
在 python 我会做:
r_['col1'] = 'test'
或者用 r 我认为它会像:
r_df.rx2('col1') = base.as_Date(r_df.rx2('col1'), '%Y-%m-%d')
版本:
pandas==1.0.1
rpy2~=3.3.5
一种实现您想要的方法是:
r_df[r_df.colnames.index('col1')] = base.as_Date(r_df.rx2('col1'), '%Y-%m-%d')
为什么 r_df['col1']
之类的东西没有实现?因为 R 可能很奇特,rpy2
中的许多选择都更喜欢轻微的烦恼,而不是非常 hard-to-debug 问题的来源。这是因为不强制 R 数据框中的列名是唯一的,并且按名称获取项目将 return 第一个具有该名称的。例如:
import rpy2.robjects as ro
dataf = ro.r('data.frame(x=1:3, x=4:6, check.names=FALSE)')
print(dataf)
# x x
# 1 1 4
# 2 2 5
# 3 3 6
dataf.rx2('x')
# R object with classes: ('RTYPES.INTSXP',) mapped to:
# [1, 2, 3]
Python 方法 index
存在于 Python list
、tuple
等...中并记录在 return 中第一个匹配索引。
如果我有一个 python 数据帧转换为 r 数据帧:
设置
import rpy2.robjects as ro
from rpy2.robjects.vectors import ListVector, DataFrame
from rpy2.robjects import numpy2ri, pandas2ri
from rpy2.robjects.conversion import localconverter
from rpy2.robjects.packages import importr
base = importr("base")
### do not activate rpy2.robjects.numpy2ri.activate() or pandas2ri
基地看起来像
base
rpy2.robjects.packages.Package as a <module 'base'>
with localconverter(ro.default_converter + pandas2ri.converter):
r_df = ro.conversion.py2rpy(df)
如何将列更新为新的数据类型? 在 python 我会做:
r_['col1'] = 'test'
或者用 r 我认为它会像:
r_df.rx2('col1') = base.as_Date(r_df.rx2('col1'), '%Y-%m-%d')
版本:
pandas==1.0.1
rpy2~=3.3.5
一种实现您想要的方法是:
r_df[r_df.colnames.index('col1')] = base.as_Date(r_df.rx2('col1'), '%Y-%m-%d')
为什么 r_df['col1']
之类的东西没有实现?因为 R 可能很奇特,rpy2
中的许多选择都更喜欢轻微的烦恼,而不是非常 hard-to-debug 问题的来源。这是因为不强制 R 数据框中的列名是唯一的,并且按名称获取项目将 return 第一个具有该名称的。例如:
import rpy2.robjects as ro
dataf = ro.r('data.frame(x=1:3, x=4:6, check.names=FALSE)')
print(dataf)
# x x
# 1 1 4
# 2 2 5
# 3 3 6
dataf.rx2('x')
# R object with classes: ('RTYPES.INTSXP',) mapped to:
# [1, 2, 3]
Python 方法 index
存在于 Python list
、tuple
等...中并记录在 return 中第一个匹配索引。