如果一个因子的水平存在但当用作names_from参数时,它永远不会出现在数据中,我真的希望pivot_wider用NA创建一个列。例如,第一行给了我两列的小标题,但是我真的很喜欢下面的三列的小标题。
tibble(Person=c("Sarah", "Jackson", "Jackson"), Rank=c(1,1,2),
FavoriteAnimal=factor(c("Dog", "Dog", "Cat")))%>%
group_by(Person)%>%arrange(Rank)%>%slice(1)%>%
pivot_wider(names_from = FavoriteAnimal, values_from=Rank)
tibble(Person=c("Jackson", "Sarah"), Dog=c(1,1), Cat=c(NA,NA))
如何获取我的NA列中未显示在数据集中的水平?
答案 0 :(得分:3)
或者,您可以先添加缺少的级别,然后进行转换:
tibble(Person=c("Sarah", "Jackson", "Jackson"),
Rank=c(1,1,2),
FavoriteAnimal=factor(c("Dog", "Dog", "Cat"))) %>%
group_by(Person) %>%
arrange(Rank) %>%
slice(1) %>%
complete(FavoriteAnimal = FavoriteAnimal) %>%
pivot_wider(names_from = FavoriteAnimal, values_from = Rank)
Person Cat Dog
<chr> <dbl> <dbl>
1 Jackson NA 1
2 Sarah NA 1
答案 1 :(得分:1)
您可以使用tidyr::spread
来做到这一点-spread(key = FavoriteAnimal, value = Rank, drop = FALSE)
给您您想要的东西。
不幸的是,在从drop
到spread
的过渡中,pivot_wider
参数似乎丢失了。