2011-08-23 10 views
9

Me siento tonto al preguntar esto, pero aquí va. Tengo una lista de números, pero quiero combinarla con la fecha.Poner un valor de repetición en una columna

por ejemplo:

list1 <- c(1, 2, 3, 4, 5) 
list2 <-c("2009-01-01") 
list3 <-cbind(list2, list1) 

Quiero la fecha MISMO aparece el mismo número de veces, ya que hay puntos de datos y luego se combinan con los puntos de datos.

date    number 
"2009-01-01"   1 
"2009-01-01"   2 
"2009-01-01"   3 
"2009-01-01"   4 
"2009-01-01"   5 

Cuando intento ejecutar el código anterior, aparece el mensaje que indica que las longitudes no coinciden. Cualquier sugerencia es apreciada Gracias.

+1

No entiendo; me funciona ... Puede probar un data.frame en lugar de una matriz (que produce 'cbind'). Además, evite llamar a cosas que no son 'list's" list ". Simplemente se vuelve confuso ya que una lista es un tipo de datos R. –

Respuesta

9

Editado para hacer que mi comentario sobre el marco de datos sea más descriptivo.

¿Qué le parece usar rep?

list1 <- 1:5 
list2 <- rep("2009-01-01",length(list1)) 
list3 <- cbind(list2, list1) 

aunque las reglas de reciclaje de R deben ofrecerle el resultado deseado independientemente. Además, ¿está seguro de que no desea una trama de datos:

list3 <- data.frame(date = list2, number = list1) 

desde cbind voluntad en su caso producir una matriz de caracteres, que desde las matrices sólo deben ser de un solo tipo.

2

La razón por la que estoy publicando a pesar de ver que pensaste que otra respuesta era "perfecta" es que cbind devuelve una matriz, que como tuvieras un vector que era "personaje", es del tipo "personaje".

> str(list3) 
chr [1:5, 1:2] "2009-01-01" "2009-01-01" "2009-01-01" ... 
- attr(*, "dimnames")=List of 2 
    ..$ : NULL 
    ..$ : chr [1:2] "list2" "list1 

Sería mejor cuando se está trabajando con datos de tipo mixto (fechas y numérico) para utilizar un hoja.de.datos. Tiene la característica además que ni siquiera es necesario utilizar rep(), ya que el reciclaje argumento se repetirá automáticamente:

> data.frame(dt = as.Date("2009-01-01"), l1 = list1) 
      dt l1 
1 2009-01-01 1 
2 2009-01-01 2 
3 2009-01-01 3 
4 2009-01-01 4 
5 2009-01-01 5 
+0

Buen punto. Tengo un poco de experiencia con ry aún me cuesta recordar el manejo de varios tipos de datos. Gracias por el recordatorio. – acesnap

1

cbind devolverá una trama de datos si uno de los argumentos es una trama de datos. En ese caso, simplemente actúa como un contenedor para data.frame [ver ?cbind].

En las otras respuestas y comentarios donde los usuarios dijeron que cbind funcionó y creó una matriz, omitieron que la matriz fuera una matriz de caracteres y los números se fusionaron con cadenas de caracteres. Probablemente no querías eso.

Una solución, que no se presenta, sin embargo, es de hacer esto:

vector1 <- c(1, 2, 3, 4, 5); 
vector2 <- c("2009-01-01"); 
cbind(data.frame(date = vector2), number = vector1); 

Esto crea una trama de datos debido a que el primer argumento es una trama de datos.

embargo, creo que la mejor, y la que realmente demuestra que sabe lo que quiere es llamar directamente data.frame:

data.frame(date = vector2, number = vector1); 
Cuestiones relacionadas