从CSV到ndarray,以及rpy2,

2 投票
2 回答
2006 浏览
提问于 2025-04-16 07:06

我可以用rec2csv来创建numpy的ndarray,

data = recfromcsv(dataset1, names=True)
xvars = ['exp','exp_sqr','wks','occ','ind','south','smsa','ms','union','ed','fem','blk']
y = data['lwage']
X = data[xvars]
c = ones_like(data['lwage'])
X = add_field(X, 'constant', c)

但是,我不知道怎么把这个转换成R的数据框,这样才能被Rpy2使用,

p = roptim(theta,robjects.r['ols'],method="BFGS",hessian=True ,y= robjects.FloatVector(y),X = base.matrix(X))

ValueError: Nothing can be done for the type <class 'numpy.core.records.recarray'> at the moment.

p = roptim(theta,robjects.r['ols'],method="BFGS",hessian=True ,y= robjects.FloatVector(y),X = base.matrix(array(X)))

ValueError: Nothing can be done for the type <type 'numpy.ndarray'> at the moment.

2 个回答

3

如果你想从一个csv文件获取一个RPY2的数据框,在RPY2.3版本中,你只需要这样做:

df = robjects.DataFrame.from_csvfile('filename.csv')

文档可以在这里找到。

1

我不太确定我完全理解你的问题,但有几点可以分享:

1) 如果可以的话,你可以直接把csv文件读入R,也就是:

robjects.r('name <- read.csv(filename.csv)')

这样你就可以在后面的函数中使用这个生成的数据框了。

或者2) 你可以把numpy数组转换成数据框——要做到这一点,你需要导入一个叫'rpy2.robjects.numpy2ri'的包。

然后你可以这样做:

array_ex = np.array([[4,3],[3,2], [1,5]])
rmatrix = robjects.r('matrix')
rdf = robjects.r('data.frame')
rlm = robjects.r('lm')

mat_ex = rmatrix(array_ex, ncol = 2)
df_ex = rdf(mat_ex) 
fit_ex = rlm('X1 ~ X2', data = df_ex)

或者你想用的其他任何函数。其实可能还有更直接的方法——我在这两种数据类型之间切换时会感到很烦,所以如果可以的话,我更倾向于使用第一种方法。

这两种方法中的任何一种能帮到你吗?

撰写回答