我在R中的代码具有以下琐碎的分配:

 df$a<-factor(df$a,levels=c("3","2","1"))


(级别的顺序在绘图中很重要,因此可能必须通过这样的分配来完成)

使用rpy2如何获得相同的结果?假设我有一个像这样构造的DataFrame:

from rpy2 import robjects

d = {'a': robjects.IntVector((1,2,3)), 'b': robjects.IntVector((4,5,6))}
dataf = robjects.DataFrame(d)


现在,我想像在R中一样更改列'a'的类型并设置其中的级别顺序。可以使用rpy吗?

最佳答案

固定R factor中的电平:

>>> from rpy2.robjects.vectors import FactorVector, IntVector
>>> v = FactorVector((1,2,3), levels=IntVector((3,2,1)))
>>> print(v)
[1] 1 2 3
Levels: 3 2 1


更改DataFrame中的列可以通过以下方式完成:

>>> dataf[dataf.index('a')] = v


注意:在R中,您很高兴在将级别指定为字符串的同时提供数值(整数)。 R确实让您默默地执行此操作,但请注意,R“因子”向量的内部表示是整数,并且这种混合可能会导致不愉快的意外。

09-04 01:28