У меня есть длинный фрейм данных, который я хочу сделать широким, используя pivot_wider
:
library(tidyr)
example_data <- data.frame(
name = c("bob", "bob", "dick", "dick", "harry", "harry"),
sport = c("baseball", "football", "hockey", "basketball", "football", "basketball")
)
pivot_wider(example_data, names_from = sport, values_from = sport)
Это дает ожидаемый результат, но с большим количеством NA
s
name baseball football hockey basketball
1 bob baseball football NA NA
2 dick NA NA hockey basketball
3 harry NA football NA basketball
Я хочу преобразовать названия видов спорта в TRUE
(так как название вида спорта уже указано в имени столбца) и преобразовать NA
s в FALSE
, создавая фрейм данных, подобный этому:
name baseball football hockey basketball
1 bob TRUE TRUE FALSE FALSE
2 dick FALSE FALSE TRUE TRUE
3 harry FALSE TRUE FALSE TRUE
Я думал, что этот код сработает, но он выдал ошибку:
pivot_wider(
example_data,
names_from = sport,
values_from = sport,
values_fill = list(sport = FALSE),
values_fn = list(sport = !is.na)
)
Error in !is.na : invalid argument type
Приведенный ниже код возвращает меня к тому, что я ищу, и затем я мог бы преобразовать его. до желаемого кадра данных:
pivot_wider(
example_data,
names_from = sport,
values_from = sport,
values_fill = list(sport = TRUE),
values_fn = list(sport = is.na)
)
Есть ли способ получить непосредственно к желаемому кадру данных? И есть ли какие-то учебные пособия по использованию аргумента values_fn
, чтобы я мог понять, почему values_fn = list(sport = !is.na)
не работает? Спасибо.