Sé cómo agregar una columna de lista:
> df <- data.frame(a=1:3)
> df$b <- list(1:1, 1:2, 1:3)
> df
a b
1 1 1
2 2 1, 2
3 3 1, 2, 3
Esto funciona, pero no:
> df <- data.frame(a=1:3, b=list(1:1, 1:2, 1:3))
Error in data.frame(1L, 1:2, 1:3, check.names = FALSE, stringsAsFactors = TRUE) :
arguments imply differing number of rows: 1, 2, 3
¿Por qué?
Además, ¿hay alguna forma de crear df
(arriba) en una sola llamada a data.frame
?
I
para Inhibir Interperetation / Conversión de objetos parece un poco demasiado corto :)class()
? pI(iris) -> i; i %>% class() 3 [1] "AsIs" "data.frame"
. ej. (devuelve la clase AsIs)Si está trabajando con
data.tables
, puede evitar la llamada aI()
library(data.table) # the following works as intended data.table(a=1:3,b=list(1,1:2,1:3)) a b 1: 1 1 2: 2 1,2 3: 3 1,2,3
fuente
data.table
por un amplio margendata_frame
s (llamados diversamentetibbles
,tbl_df
,tbl
) de forma nativa apoyan la creación de columnas de la lista utilizando eldata_frame
constructor. Para usarlos, cargue una de las muchas bibliotecas con ellos, comotibble
,dplyr
otidyverse
.> data_frame(abc = letters[1:3], lst = list(1:3, 1:3, 1:3)) # A tibble: 3 × 2 abc lst <chr> <list> 1 a <int [3]> 2 b <int [3]> 3 c <int [3]>
En realidad, están
data.frames
bajo el capó, pero algo modificados. Casi siempre se pueden utilizar normalmentedata.frames
. La única excepción que he encontrado es que cuando las personas hacen controles de clase inapropiados, causan problemas:> #no problem > data.frame(x = 1:3, y = 1:3) %>% class [1] "data.frame" > data.frame(x = 1:3, y = 1:3) %>% class == "data.frame" [1] TRUE > #uh oh > data_frame(x = 1:3, y = 1:3) %>% class [1] "tbl_df" "tbl" "data.frame" > data_frame(x = 1:3, y = 1:3) %>% class == "data.frame" [1] FALSE FALSE TRUE > #dont use if with improper testing! > if(data_frame(x = 1:3, y = 1:3) %>% class == "data.frame") "something" Warning message: In if (data_frame(x = 1:3, y = 1:3) %>% class == "data.frame") "something" : the condition has length > 1 and only the first element will be used > #proper > data_frame(x = 1:3, y = 1:3) %>% inherits("data.frame") [1] TRUE
Recomiendo leer sobre ellos en R 4 Data Science (gratis).
fuente