如何使用rpy2将数据帧列转换为因子?

时间:2018-01-23 09:55:35

标签: python r dataframe type-conversion rpy2

我在Python中有一个Pandas DataFrame,我使用data.frame转换为R rpy2。一些示例设置代码如下:

import pandas as pd
import rpy2.robjects as robjects
from rpy2.robjects import r, pandas2ri

df = pd.DataFrame({
    'col_1': ['a', 'b', 'c'], 
    'col_2': [1, 2, 3],
    'col_3': [2.3, 5.4, 3.8]
})

pandas2ri.activate()
r_df = pandas2ri.py2ri(df)

col_2充满了整数值,正如预期的那样,在转换过程中,它会转换为R {s} int原子模式。我可以使用以下方法检查类(我理解为可以应用于底层对象的哪些函数):

r.sapply(r_df, r['class'])

但是,这个变量实际上是名义上的(无序的分类)。因此,我需要将此列转换为一个因子。

在R中,我可以通过使用类似的东西重新分配来轻松完成此任务:

r_df$col2 <- as.factor(r_df$col2)

但是,我不确定使用rpy2的语法是否正确。我可以使用rx2访问器方法访问该列,并使用FactorVector将列强制转换为一个因子。

 col2 = robjects.vectors.FactorVector(r_df.rx2('col_2'))

但是,我似乎无法将其重新分配回原始数据框。将此重新分配回原始数据框的最佳方法是什么?有没有更好的方法来进行这种转换?感谢

追加

我已设法使用下面的代码将col_2转换为factor,但它并不是一个最佳答案,因为我不得不查找所有列名,使用Python方法而不是R找到所需列的索引,然后使用它进行重新分配。

col_2_index = list(r_df.colnames).index('col_2')
col_2 = robjects.vectors.FactorVector(r_df.rx2('col_2'))
r_df[assessor_col_index] = col_2

理想情况下,我希望看到一种不依赖于查找列索引的重新分配方法。但是,我以前的尝试抛出了以下错误:

r_df['col_2'] = converted_col
TypeError: SexpVector indices must be integers, not str

r_df.rx2('col_2') = converted_col
SyntaxError: can't assign to function call

0 个答案:

没有答案