Я знаю, как добавить столбец списка:
> 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
Это работает, но нет:
> 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
Почему?
Кроме того, есть ли способ создать df
(см. Выше) за один вызов data.frame
?
I
дляclass()
? напримерI(iris) -> i; i %>% class() 3 [1] "AsIs" "data.frame"
(возвращает класс AsIs)Если вы работаете с
data.tables
, то можете избежать звонкаI()
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
источник
data.table
с большим отрывомdata_frame
s ( по- разному называютtibbles
,tbl_df
,tbl
) изначально поддерживает создание столбцов списка с помощьюdata_frame
конструктора. Чтобы использовать их, загрузите с ними одну из многих библиотек, напримерtibble
,dplyr
илиtidyverse
.> 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]>
Они действительно находятся
data.frames
под капотом, но несколько видоизменены. Их почти всегда можно использовать как обычноdata.frames
. Единственное исключение, которое я обнаружил, - это то, что когда люди выполняют несоответствующие проверки классов, они вызывают проблемы:> #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
Я рекомендую прочитать о них в R 4 Data Science (бесплатно).
источник