No se puede hacer referencia a un vector al crear un marco de datos usando tibble.
Me gustaría crear un marco de datos de dos columnas. La primera columna contiene solo una letra, mientras que la segunda columna contiene varias letras. El contenido en la segunda columna se almacena en un vector. Intenté usar la función tibble
del paquete tibble
, pero me dio resultados extraños. La segunda columna es igual que la primera columna.
library(tibble)
vec <- c("A", "B", "C")
tibble(
vec = rep(vec[1], length(vec)),
vec_new = vec
)
# # A tibble: 3 x 2
# vec vec_new
#
# 1 A A
# 2 A A
# 3 A A
Intenté crear el mismo marco de datos con las funciones data.frame
y data.table
del paquete data.table
. El resultado es el esperado. Por favor, háganme saber por qué tibble
genera resultados extraños y cuál es la mejor manera de solucionarlo.
data.frame(
vec = rep(vec[1], length(vec)),
vec_new = vec
)
# vec vec_new
# 1 A A
# 2 A B
# 3 A C
library(data.table)
data.table(
vec = rep(vec[1], length(vec)),
vec_new = vec
)
# vec vec_new
# 1: A A
# 2: A B
# 3: A C
davy.ai
Parece que
tibble
está reciclando el primer elemento del vectorvec
para crear la segunda columna, en lugar de utilizar los valores reales del vector. Este comportamiento se debe al uso de la funciónrep()
en el primer argumento de la funcióntibble()
, que repite el primer elemento devec
tantas veces como sea la longitud devec
.Para crear el marco de datos deseado de dos columnas con
tibble
, podemos utilizar la función base de Rdata.frame()
en su lugar, y luego convertir el marco de datos resultante a un tibble utilizando la funciónas_tibble()
del paquetetibble
:Alternativamente, podemos utilizar la función
tibble()
pasando el vectorvec
directamente al segundo argumento, sin usarrep()
:Tenga en cuenta que las funciones
data.frame()
ydata.table()
funcionan como se espera porque no están utilizando la funciónrep()
, y por lo tanto están utilizando correctamente los valores del vectorvec
para poblar la segunda columna.