I have a factor vector sv='ababbc' and a integer vector fv=[1,1,1,1,1,1]. fv is correspond to sv.
import rpy2.robjects as robjects
sv=robjects.StrVector('ababbc')
fac=robjects.FactorVector(sv)
fv=robjects.r['rep'](1,6)
I want to change the value of element to 2 in fv, which of index correspond to letter “a”. made fv=[2,1,2,1,1,1]
How to do it? Thank you.
答案 0 :(得分:0)
获取索引时为true:
fac
第1和第3个职位的字母是'a'。
你不能用In [55]:
np.argwhere(np.array(fac) == 'a')
Out[55]:
array([], shape=(0, 1), dtype=int64)
In [56]:
np.array(fac)
Out[56]:
array([1, 2, 1, 2, 2, 3], dtype=int32)
做到这一点,因为它已经分解并只包含1,2,3 ......等级,而不是原来的'a','b','c' ......再也没有了。
R
或者可以在In [51]:
robjects.reval('result1 <- which(sv %in% c("a"))')
print robjects.r.result1
[1] 1 3
方面完成:
R
要系统地将给定值分配到某个级别,建议您使用In [53]:
robjects.r.assign('sv', sv)
robjects.reval('result3 <- factor(sv, levels=c("a","b","c"), labels=c(10,2,3))')
print robjects.r.result3
[1] 10 2 10 2 2 3
Levels: 10 2 3
中的factor
函数:
a
因此10
获得b
,2
获得c
,3
获得{{1}},依此类推。