2015-07-19 7 views
5

Ich habe einen Datenrahmen in Rpy2 in Python und ich möchte Spalten daraus herausziehen. Was ist das rpy2-Äquivalent dieses R-Codes?wie Spalten aus R Datenrahmen in Rpy2 in Python auswählen?

df[,c("colA", "colC")]

dies funktioniert die erste Spalte erhalten:

mydf.rx(1)

aber wie kann ich einen Satz von Spalten ziehen, z.B. der 1., 3. und 5.?

mydf.rx([1,3,5])

funktioniert nicht. auch nicht:

mydf.rx(rpy2.robjects.r.c([1,3,5]))

Antwort

2

Ich denke, die Antwort ist:

# cols to select 
c = rpy2.robjects.IntVector((1,3)) 
# selection from df 
mydf.rx(True, c) 
4

Alternativ können Sie den R-Datenrahmen in ein Python-Pandas Datenrahmen übergeben und Subset Ihre resultierenden 1, 3, 5 Spalten :

#!/usr/bin/python 
import rpy2 
import rpy2.robjects as ro 
import pandas as pd 
import pandas.rpy.common as com 

# SOURCE R SCRIPT INSIDE PYTHON 
ro.r.source('C:\\Path\To\R script.R') 

# DEFINE PYTHON DF AS R DF 
pydf = com.load_data('rdf') 
cols = pydf[[1,3,5]] 
0

Die beste Art und Weise, die ich gefunden ist durch diese einfache Sache zu tun:

from rpy2.robjects.packages import importr 
from rpy2.robjects import pandas2ri 
import rpy2.robjects as robjects 

dataframe = robjects.r('data.frame') 
df_rpy2 = dataframe([1,2,],[5,6]) 
df_pd = pd.DataFrame({'A': [1,2], 'B': [5,6]}) 

base = importr('base') #Creates an instance of R's base package 
pandas2ri.activate() #Converts any pandas dataframe to R equivalent 

base.colnames(df_pd) #Finds the column names of the dataframe df_pd 
base.colnames(df_rpy2) #Finds the column names of the dataframe df_rpy2 

Die Ausgabe lautet:

R object with classes: ('character',) mapped to: 
<StrVector - Python:0x7fa3504d3048/R:0x10f65ac0> 
['X1L', 'X2L', 'X5L', 'X6L'] 

R object with classes: ('character',) mapped to: 
<StrVector - Python:0x7fa352493548/R:0x103b6e40> 
['A', 'B'] 

Dies sowohl für den Datenrahmen arbeitet Pandas & rpy2 erstellt. Hoffe das hilft!