2012-09-12 22 views
20

Tengo este código de muestra para crear un nuevo marco de datos 'new_data' del marco de datos existente 'my_data'.Signo de dólar antes de una variable

new_data = NULL 
n = 10 #this number correspond to the number of rows in my_data 
conditions = c("Bas_A", "Bas_T", "Oper_A", "Oper_T") # the vector characters correspond to the target column names in my_data 
for (cond in conditions){ 
    for (i in 1:n){ 
     new_data <- rbind(new_data, c(cond, my_data$cond[i])) 
    } 
} 

El problema es que my_data$cond (donde cond es una variable, y no el nombre de la columna) No se aceptan tarjetas.

¿Cómo puedo llamar a una columna de un marco de datos utilizando, después del signo de dólar, un valor de variable?

+8

'' $ no sirve realmente para ser utilizado mediante programación. Está destinado a ser una conveniencia para el uso interactivo. Intenta usar 'mydata [i, cond]' en su lugar. Sin embargo, al mirar tu código, creo que podrías beneficiarte al mirar la función 'reshape', o incluso el paquete' reshape2' ... – James

+0

Ten en cuenta que 'my_data' es un' dato.frame' y 'new_data' es una' matriz'. – GSee

+3

Ver 'fortuna (312)'. –

Respuesta

32

Para acceder a una columna, el uso:

my_data[ , cond] 

o

my_data[[cond]] 

TH fila i se puede acceder con:

my_data[i, ] 

combinar ambos para obtener el valor deseado :

my_data[i, cond] 

o

my_data[[cond]][i] 
+0

no podemos usar 'c $ columna', donde' c' es una matriz? Obtenía 'Error en c $ col1: $ operador no es válido para vectores atómicos' ... – Mahesha999

+0

@ Mahesha999 No puede usar' $ 'con matrices. –

3

Creo que necesita get().

Por ejemplo,
get(x,list), donde list es la lista y x es la variable (puede ser una cadena), lo que equivale a list$x.

Pero en get(x,list), x puede ser una variable durante el uso de $, x no puede ser una variable.

0

$ trabaja en columnas, no en objetos de columnas individuales. Es una forma de vectorización. El código

corrections$BookDate = as.Date(corrections$BookDate, format = "%m/%d/%Y") 

convierte el contenido de la columna de la BookDate de la mesa corrections de cuerdas para Date objetos. Lo realiza en una operación, asignación.

hacer lo siguiente y va a arreglar el problema:

new_data <- rbind(new_data, c(cond, my_data$cond)) 
0

frecuencia va a querer seleccionar una columna entera, es decir, una variable específica de una trama de datos. Si desea seleccionar todos los elementos del diámetro variable, por ejemplo, ambos harán el truco:

dataframe_name[,column_position] 
dataframe_name[,"column_name"] 

Sin embargo, hay un atajo. Si sus columnas tienen nombres, puede utilizar el signo $:

dataframe_name$column_name 
Cuestiones relacionadas