В R преобразовать data.frame в стандартный тиббл, не содержащий списков - PullRequest
0 голосов
/ 06 августа 2020

Как я могу преобразовать приведенный ниже data.frame в сопоставимый / традиционный тиббл (т. Е. Не содержащий списков); и почему возникает такое поведение / можно ли этого избежать?

df_test <- structure(list(Dim1 = structure(list(0.1, 4, NA_real_, NA_real_, 
                                     NA_real_), .Names = c("one", "two", "adfae", NA, "")), Dim2 = structure(list(
                                       2, 5, NA_real_, NA_real_, NA_real_), .Names = c("one", "two", 
                                                                                       "adfae", NA, "")), Dim3 = structure(list(3, 6, NA_real_, NA_real_, 
                                                                                                                                NA_real_), .Names = c("one", "two", "adfae", NA, ""))), class = "data.frame", row.names = c("one", 
                                                                                                                                                                                                                            "two", "adfae", "NA.", "X"))
tbble_test <- as_tibble(df_test)
tibble_test

Заранее спасибо

1 Ответ

1 голос
/ 06 августа 2020

Каждый столбец - это list,

str(df_test)
#'data.frame':  5 obs. of  3 variables:
# $ Dim1:List of 5
#  ..$ one  : num 0.1
#  ..$ two  : num 4
#  ..$ adfae: num NA
#  ..$ NA   : num NA
#  ..$      : num NA
# $ Dim2:List of 5
#  ..$ one  : num 2
#  ..$ two  : num 5
#  ..$ adfae: num NA
#  ..$ NA   : num NA
#  ..$      : num NA
# $ Dim3:List of 5
#  ..$ one  : num 3
#  ..$ two  : num 6
#  ..$ adfae: num NA
#  ..$ NA   : num NA
#  ..$      : num NA

, мы можем сначала unlist, и он должен работать

df_test[] <- lapply(df_test, unlist)
as_tibble(df_test)

Или используя tidyverse

library(dplyr)
df_test %>%
     mutate(across(everything(), unlist)) %>% 
     as_tibble
...