问题
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.
回答1:
Replace the missing values in sex before pivoting:
surveys %>%
filter(taxa == "Rodent",
!is.na(weight)) %>%
group_by(sex,genus) %>%
summarize(mean_weight = mean(weight)) %>%
ungroup() %>%
mutate(sex = if_else(sex == "", "unknown", sex)) %>%
pivot_wider(
names_from = sex,
values_from = mean_weight,
names_repair = "minimal"
)
来源:https://stackoverflow.com/questions/59327101/pivot-wider-does-not-seem-to-work-with-missing-values-how-to-turn-spread-into