由于spread()函数已被新的pivot_wider()函数代替,我从现在开始尝试使用pivot_wider(),但由于缺少值,它似乎无法正常工作。任何帮助都非常感激
# 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.
答案 0 :(得分:1)
在透视之前替换掉性别中缺失的值:
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"
)