Как перенести dataframe
в list
и не включать значение NA? Спасибо!
Есть датафрейм ori_df
library(tidyverse)
ori_df <- data.frame(category=c('a','b',NA),subcategory=c('w',NA,'Z'))
Код ниже может перенести ori_df
в список fin_list
, но результат будет включать NA
fin_list <- as.list(ori_df)
Как удалить значение NA
в fin_list
, желаемый результат, как показано ниже fin_list_wished
?
fin_list_wished <- list(category=c('a','b'),subcategory=c('w','Z'))
Аналогично комментарию выше:
lapply(ori_df, function(x) x[!is.na(x)])
Та же идея, но с purrr
:
library(purrr)
my_purrr_list <- map(as.list(my_df), discard, is.na)
my_purrr_list
#> $category
#> [1] "a" "b"
#>
#> $subcategory
#> [1] "w" "Z"
Или без map
/apply
:
library(tidyverse) # tidyr, dplyr
library(magrittr) # %$% pipe
my_dplyr_list <- my_df %>%
pivot_longer(everything()) %>% # columns must be the same type
filter(!is.na(value)) %$%
split(value, .$name)
my_dplyr_list
#> $category
#> [1] "a" "b"
#>
#> $subcategory
#> [1] "w" "Z"
Данные игрушки:
my_df <- data.frame(category = c('a', 'b', NA), subcategory = c('w', NA, 'Z'))
Created on 2024-07-19 with reprex v2.1.0
lapply(ori_df, \(x) x[!is.na(x)])
илиlapply(ori_df, na.omit)
.