'pivot_wider does not seem to work with missing values. How to turn spread() into pivot_wider() when there is missing values
as the spread() function is being replaced by the new pivot_wider() function, I was trying to use the pivot_wider() from now on but it does not seem to work because of the missing values. Any help is much appreciated
# This is an example I saw on the web
surveys <- read.csv("http://kbroman.org/datacarp/portal_data_joined.csv",
stringsAsFactors = FALSE)
library(dplyr)
surveys %>%
filter(taxa == "Rodent",
!is.na(weight)) %>%
group_by(sex,genus) %>%
summarize(mean_weight = mean(weight)) %>%
spread(sex, mean_weight)```
#It gives me the following output. This is what I would like to get
# A tibble: 10 x 4
genus V1 F M
<chr> <dbl> <dbl> <dbl>
1 Baiomys NA 9.16 7.36
2 Chaetodipus 19.8 23.8 24.7
3 Dipodomys 81.4 55.2 56.2
4 Neotoma 168. 154. 166.
5 Onychomys 23.4 26.8 26.2
6 Perognathus 6 8.57 8.20
7 Peromyscus 19.9 22.5 20.6
8 Reithrodontomys 11.1 11.2 10.2
9 Sigmodon 70.3 71.7 61.3
10 Spermophilus NA 57 130
surveys %>%
filter(taxa == "Rodent",
!is.na(weight)) %>%
group_by(sex,genus) %>%
summarize(mean_weight = mean(weight)) %>%
pivot_wider(
names_from = sex,
values_from = mean_weight,
names_repair = "minimal"
)
It says the following
Error: Column 1 must be named.
Use .name_repair to specify repair.
Run `rlang::last_error()` to see where the error occurred.
Solution 1:[1]
If you don't want to pre-process your data, pivot_wider has recently gained a new argument to assist with missing factor levels (https://cran.r-project.org/web/packages/tidyr/news/news.html):
"pivot_wider() gains new names_expand and id_expand arguments for turning implicit missing factor levels and variable combinations into explicit ones. This is similar to the drop argument from spread()"
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | Lizz Huntley |
