"Программирование" таблицы публикаций в R
Всем хорошо известно, что R обрабатывает большие данные очень легко. У меня проблемы с тем, чтобы поместить результаты анализа, выполненного в R, в таблицы для публикации.
Я хотел бы объяснить это на примере. У нас есть этот простой набор данных:
value<-cbind(c(rnorm(100,500,90),rnorm(100,800,120)))
genotype<-cbind(c(rep("A",100),rep("B",100)))
gender<-rep(c("M","F","F","F"),50)
df<-cbind(value,genotype,gender)
df<-as.data.frame(df)
colnames(df)<-c("value","genotype","gender")
df$value<-as.numeric(as.character(df$value))
Я хотел бы проанализировать данные для научного проекта. Чтобы извлечь нужную мне информацию, я должен сделать это:
> quantile(subset(df,gender=="M")$value)
0% 25% 50% 75% 100%
323.6955 523.1237 655.6593 828.7438 1045.0406
> quantile(subset(df,gender=="F")$value)
0% 25% 50% 75% 100%
233.3721 520.1101 633.8767 802.2277 1149.3072
> wilcox.test((subset(df,gender=="M")$value),(subset(df,gender=="F")$value))$p.value
[1] 0.924699
> table(df$genotype)
A B
100 100
> table(df$gender)
F M
150 50
> prop.test(50,150)$p.value
[1] 6.311983e-05
> table(df$genotype,df$gender)
F M
A 75 25
B 75 25
> prop.table(table(df$genotype,df$gender),2)
F M
A 0.5 0.5
B 0.5 0.5
> prop.test(c(75,25),c(125,50))$p.value
[1] 0.2990147
Что ж, это дает мне всю информацию, которая мне нужна, но до создания таблицы качества публикации еще далеко. Для этого мне нужно скопировать / вставить числа из результатов в Excel. Конечный продукт таков:
Проблема в том, что копирование / вставка неудобно, может стать утомительным при большом объеме данных и создает возможность человеческой ошибки. Есть ли способ "запрограммировать" или "закодировать" эту таблицу непосредственно в R, так что я могу просто запустить код и сохранить вывод как .csv
файл?
1 ответ
Вы могли бы использовать Publish
пакет (еще не совсем на CRAN, но можно получить из GitHub).
library(devtools)
install_github("tagteam/Publish")
library(Publish)
Тогда вы можете использовать univariateTable
функция, чтобы получить именно то, что вы просите (Q
запрашивает медиану и IQR)
univariateTable(gender ~ Q(value) + genotype, data=df)
Variable Level gender = M (n=50) gender = F (n=150)
1 value median [iqr] 647.0 [488.4, 829.0] 615.4 [493.5, 797.4]
2 genotype A 25 (50.0) 75 (50.0)
3 B 25 (50.0) 75 (50.0)
Total (n=200) p-value
1 617.9 [491.0, 812.4] 0.666
2 100 (50.0)
3 100 (50.0) 1.000
Функция возвращает фрейм данных, который можно легко сохранить в текстовом файле, используя, скажем, write.table
или что-то подобное.