"Программирование" таблицы публикаций в 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 или что-то подобное.

Другие вопросы по тегам