Мне дали код для проверки различий в SEX в моем df, подмножество, которое я дал, содержит SPECIES с M, F и U в столбце SEX, но я хочу проверить только разницу M против F.Некоторые SPECIES также имеют только один SEX, поэтому один уровень
Следующий код работает для следующего подмножества данных, содержащего, на всех SPECIES, M, F, а некоторые с U
subset %>%
select(-RING, -AGE, -FAT) %>%
gather(variable, value, -SPECIES, -SEX) %>%
group_by(SPECIES, variable) %>%
nest() %>%
mutate(
chi_sq_results = map(data, ~ chisq.test(.x$SEX, .x$value)),
tidied = map(chi_sq_results, tidy)
) %>%
unnest(tidied, .drop = TRUE)
> dput(subset)
structure(list(RING = c("H8309", "K617", "A264905", "A358705",
"A432721", "O59461", "O92094", "O92095"), SPECIES = c("ACCIPITER NISUS",
"ACCIPITER NISUS", "ACROCEPHALUS SCIRPACEUS", "ACROCEPHALUS SCIRPACEUS",
"ACROCEPHALUS SCIRPACEUS", "AEGITHALOS CAUDATUS", "AEGITHALOS CAUDATUS",
"AEGITHALOS CAUDATUS"), SEX = c("M", "F", "F", "M", "U", "M",
"F", "U"), AGE = c(5L, 4L, 4L, 3L, 4L, 4L, 2L, 2L), FAT = c(0L,
0L, 2L, 2L, 6L, 0L, 0L, 0L), WEIGHT = c(141, 2885, 118, 11, 145,
64, 68, 7), WING = c(199, 232, 645, 66, 63, 57, 56, 58), WINGPRI = c(117L,
167L, NA, 50L, 48L, 42L, 38L, 44L), BEAK = c(192, 204, NA, 182,
16, 82, 796, 878), TARSUS = c(52, 622, NA, 22, 219, 138, 1654,
1785)), .Names = c("RING", "SPECIES", "SEX", "AGE", "FAT", "WEIGHT",
"WING", "WINGPRI", "BEAK", "TARSUS"), row.names = c(NA, -8L), class = c("tbl_df",
"tbl", "data.frame"), spec = structure(list(cols = structure(list(
RING = structure(list(), class = c("collector_character",
"collector")), SPECIES = structure(list(), class = c("collector_character",
"collector")), SEX = structure(list(), class = c("collector_character",
"collector")), AGE = structure(list(), class = c("collector_integer",
"collector")), FAT = structure(list(), class = c("collector_integer",
"collector")), WEIGHT = structure(list(), class = c("collector_number",
"collector")), WING = structure(list(), class = c("collector_number",
"collector")), WINGPRI = structure(list(), class = c("collector_integer",
"collector")), BEAK = structure(list(), class = c("collector_number",
"collector")), TARSUS = structure(list(), class = c("collector_number",
"collector"))), .Names = c("RING", "SPECIES", "SEX", "AGE",
"FAT", "WEIGHT", "WING", "WINGPRI", "BEAK", "TARSUS")), default = structure(list(), class = c("collector_guess",
"collector"))), .Names = c("cols", "default"), class = "col_spec"))
НоКогда я пытаюсь применить этот же код к другому подмножеству без U, он не работает, он также не работает в полной df.Я полагаю, что это не работает на полном df, потому что некоторые SPECIES имеют только один уровень в столбце SEX, например.SPECIES x имеет только F (женщины)
Я получаю эту ошибку:
Error in mutate_impl(.data, dots) :
Evaluation error: 'x' and 'y' must have at least 2 levels.
Подмножество без U:
> dput(subsetU)
structure(list(RING = c("H8309", "K617", "A264905", "A358705",
"O59461", "O92094"), SPECIES = c("ACCIPITER NISUS", "ACCIPITER NISUS",
"ACROCEPHALUS SCIRPACEUS", "ACROCEPHALUS SCIRPACEUS", "AEGITHALOS CAUDATUS",
"AEGITHALOS CAUDATUS"), SEX = c("M", "F", "F", "M", "M", "F"),
AGE = c(5L, 4L, 4L, 3L, 4L, 2L), FAT = c(0L, 0L, 2L, 2L,
0L, 0L), WEIGHT = c(141, 2885, 118, 11, 64, 68), WING = c(199,
232, 645, 66, 57, 56), WINGPRI = c(117L, 167L, NA, 50L, 42L,
38L), BEAK = c(192, 204, NA, 182, 82, 796), TARSUS = c(52,
622, NA, 22, 138, 1654)), .Names = c("RING", "SPECIES", "SEX",
"AGE", "FAT", "WEIGHT", "WING", "WINGPRI", "BEAK", "TARSUS"), row.names = c(NA,
-6L), class = c("tbl_df", "tbl", "data.frame"))
Надеемся, что данные воспроизводимы, этов первый раз я делаю это
Спасибо