Мой фрейм данных:
data <- structure(list(group = c(1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L), col1 = c(9,
9.05, 7.15, 7.21, 7.34, 8.12, 7.5, 7.84, 7.8, 7.52, 8.84, 6.98,
6.1, 6.89, 6.5, 7.5, 7.8, 5.5, 6.61, 7.65, 7.68), col2 = c(11L,
11L, 10L, 1L, 3L, 7L, 11L, 11L, 11L, 11L, 4L, 1L, 1L, 1L, 2L,
2L, 1L, 4L, 8L, 8L, 1L), col3 = c(7L, 11L, 3L, 7L, 11L, 2L, 11L,
5L, 11L, 11L, 5L, 11L, 11L, 2L, 9L, 9L, 3L, 8L, 11L, 11L, 2L),
col4 = c(11L, 11L, 11L, 11L, 6L, 11L, 11L, 11L, 10L, 7L,
11L, 2L, 11L, 3L, 11L, 11L, 6L, 11L, 1L, 11L, 11L), col5 = c(11L,
1L, 2L, 2L, 11L, 11L, 1L, 10L, 2L, 11L, 1L, 3L, 11L, 11L,
8L, 8L, 11L, 11L, 11L, 2L, 9L)), class = "data.frame", row.names = c(NA,
-21L))
У меня есть функция, которая сравнивает столбцы в каждой группе. Я бы хотел, чтобы он сравнивал не все столбцы между собой, а только те, которые я выбираю.
Теперь функция сравнивает:(2-3;2-4;2-5;2-6;3-4;3-5;3-6;4-5;4-6;5-6)
Я хочу сам установить этот порядок, например:(2-4;3-5;4-6)
Функция:
wilcox.fun <- function(dat) {
do.call(rbind, combn(names(dat), 2, function(x) {
test <- wilcox.test(dat[[x[1]]], dat[[x[2]]], paired=TRUE)
data.frame(Test = sprintf('Group %s by Group %s', x[1], x[2]),
W = round(test$statistic,4),
p = test$p.value)
}, simplify = FALSE))
}
result <- purrr::map_df(split(data[,c(2,3,4,5,6)], data$group), wilcox.fun, .id = 'Group')
Да, это сработало для меня. А можно еще подсказать, нужно ли сделать смещение для вектора (2,3,4) на +2 и сравнить (2-4;3-5;4-6)?
Прямо сейчас 2–4, 3–5, 4–6 соответствуют номерам столбцов в исходном
data
, поэтому номер столбца 2–4 —col1-col3
, 3–5 —col2-col4
. Соответственно измените числа вcombinations
. Чтобы было ясно, вы также можете изменитьcombination
с номера на имя, напримерcombination <- list(c('col1', 'col3'), c('col2','col4'),...etc)
, и это должно работать с тем же кодом.а не могли бы вы подсказать как ограничить количество групп, например сравнение для 1 и 2, а для третьей не надо
Я вижу, что вы задали новый вопрос по этому поводу и уже получили ответ.