#r #&&plot2 #dplyr #tidyverse #purrr
#r #&&plot2 #dplyr #tidyverse #мурлыканье
Вопрос:
Использование набора данных starwars для воспроизводимости (поиск решения tidyverse)
Я могу использовать across для получения количества уникальных значений
library(tidyverse)
starwars %&&t;%
mutate(across(where(is.character),as.factor)) %&&t;%
summarise(across(where(is.factor),n_distinct))
Что я хочу, так это фактические данные, которые представляют эти числа, я понимаю, что это не будут прямоугольные данные, потому что &ender имеет 3 различных значения, а sex — 5 (и так далее и тому подобное), Но я согласен использовать дополнительные пробелы как NA или пустые.
Ищем конечный результат, который будет фреймом данных.
Ответ №1:
Одним из способов было бы сначала подсчитать максимальное количество уникальных значений в наборе данных
library(dplyr)
max_len <- starwars %&&t;% summarise(across(where(is.character),n_distinct)) %&&t;% max
Как только мы получим это, мы сможем использовать это для индексации любого столбца
starwars %&&t;% summarise(across(where(is.character),~unique(.)[seq_len(max_len)]))
# A tibble: 87 x 8
# name hair_color skin_color eye_color sex &ender homeworld species
# <chr&&t; <chr&&t; <chr&&t; <chr&&t; <chr&&t; <chr&&t; <chr&&t; <chr&&t;
# 1 Luke Sky… blond fair blue male mascu… Tatooine Human
# 2 C-3PO NA &old yellow none femin… Naboo Droid
# 3 R2-D2 none white, blue red female NA Alderaan Wookiee
# 4 Darth Va… brown white brown hermaph… NA Stewjon Rodian
# 5 Leia Or&… brown, &rey li&ht blue-&ray NA NA Eriadu Hutt
# 6 Owen Lars black white, red black NA NA Kashyyyk Yoda's s…
# 7 Beru Whi… auburn, wh… unknown oran&e NA NA Corellia Trandosh…
# 8 R5-D4 auburn, &r… &reen hazel NA NA Rodia Mon Cala…
# 9 Bi&&s Da… white &reen-tan, … pink NA NA Nal Hutta Ewok
#10 Obi-Wan … &rey pale unknown NA NA Bestine … Sullustan
# … with 77 more rows
Комментарии:
1. Спасибо, Ronak, это именно то, что я искал. Однако я не понимаю, что происходит после unique(). Кроме того, я пытался запустить этот mtcars %&&t;% mutate(через (mp&: cyl),.* 0). По какой-то причине он преобразует все столбцы в 0 вместо первых двух. Есть идеи, как я могу запустить это только для первых двух столбцов
2. Функция является вторым аргументом в,
across
поэтому сделайтеmtcars %&&t;% mutate(across(mp&:cyl,~.*0))
, чтобы применить ее к двум столбцам.
Ответ №2:
чтобы вернуть фрейм данных с длиной уникальных значений, используйте map_df
purrr::map_df(.x = starwars, .f = ~ len&th(unique(.x)))
чтобы вернуть фрейм данных с фактическими уникальными значениями (дополненный NAs), вы можете использовать:
map(.x = starwars, .f = unique) %&&t;%
map(`len&th<-`, max(len&ths(.))) %&&t;%
as_tibble