Циклическая функция, которая возвращает список переменных в кадре данных, сгруппированных по другой переменной - PullRequest
0 голосов
/ 01 марта 2019

В качестве примера набора данных

example.df <- data.frame( 
species = sample(c("primate", "non-primate"), 50, replace = TRUE),
treated = sample(c("Yes", "No"), 50, replace = TRUE), 
gender = sample(c("male", "female"), 50, replace = TRUE), 
var1 = rnorm(50, 100, 5), var2=rnorm(50, 10,5), var3 = rnorm (50, 25, 5))

Я пытаюсь использовать pairw.kw из пакета asbio для вычисления P-значений dunn test после группировки по переменной.

by(example.df,example.df$treated, function(X) pairw.kw(X$var1, X$species, conf = 0.95))

возвращает действительный результат.

Как я могу изменить этот код (или каким-либо другим способом) для циклического перебора других числовых переменных (у меня есть 23 в моем фактическом наборе данных)?

Редактировать: я использовал следующий код для решения моего вопроса, основываясь на отличных ответах от @ jay.sf ниже.

vars <- colnames(select_if(example.df, is.numeric))
res <- by(example.df, example.df$treated, simplify = FALSE, function(X) sapply(vars, simplify = FALSE, USE.NAMES = TRUE, function(i) pairw.kw(X[[i]], X$species, conf = 0.95)))
res_summary <- res %>% map_depth(2, "summary")
res_summary.df <- do.call(rbind, lapply(sapply(res_summary, `[`, simplify = FALSE, USE.NAMES = TRUE), data.frame))

Это преобразует объект сводки, единственное, что мне нужно из res, и преобразует его в кадр данных, с которым легко работать.

1 Ответ

0 голосов
/ 01 марта 2019

Вы можете просто создать sapply(), который проходит по различным переменным.Во-первых, нам нужен символьный вектор, содержащий имена числовых имен.

(vars <- names(example.df)[4:6])
# [1] "var1" "var2" "var3"

Теперь мы поместим это в by(.)

library("asbio")
res <- by(example.df, example.df$treated, function(X) sapply(vars, function(i)
  pairw.kw(X[[i]], X$species, conf = 0.95)))

Наконец, вы можете запустить str(res)чтобы увидеть, что в результате и как получить к нему доступ.

Например

> res$Yes[[4]]
                                        Diff    Lower   Upper Decision Adj. P-value
Avg.ranknon-primate-Avg.rankprimate -0.19444 -5.55705 5.16817   FTR H0     0.943345
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...