2016-01-24 2 views
0

Я нашел функцию univariateTable чрезвычайно полезной для обработки больших данных для приятного и чистого вывода таблицы. Но есть несколько вещей, которые мне все еще нужно делать вручную после того, как таблица экспортируется в csv, и я предпочел бы сделать это в R, чтобы автоматизировать процесс и избежать человеческих ошибок.Точная настройка таблицы вывода функции «univariateTable»

Вот пример кода с выводом таблицы, я затем экспортировать в csv

value<-cbind(c(rnorm(103.251,503.24,90),rnorm(103.251,823.24,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)) 
library(Publish) 
summary(univariateTable(gender ~ Q(value) + genotype, data=df)) 

Две проблемы у меня есть следующие:

  1. Есть ли способ, чтобы округлить число в таблица аналогична этому: round(99.73)

  2. Есть ли способ заменить , на - на выходе диапазона межквартильный в аналогии с этим: gsub(", ","-","[503.7, 793.3]"), и вместо median [iqr] иметь его потушить median [IQR]

Опять же, я их вручную после экспорта таблиц, но для больших таблиц это намного больше удобно автоматизировать процесс.

ответ

2

univariateTable имеет аргумент цифр, который можно использовать для округления. Чтобы изменить форматирование, вы можете просмотреть список, возвращенный univariateTable, чтобы выяснить, где найти значения, которые необходимо изменить.

Ваш пример данных забросил ошибку, поэтому я изменил ее, чтобы запустить ее, а также немного очистил код.

# devtools::install_github("tagteam/Publish") 
library(Publish) 

value <- c(rnorm(90, 103.251,503.24),rnorm(110, 103.251,823.24)) 
genotype <- rep(c("A","B"), each=100) 
gender <- rep(c("M","F","F","F"),50) 
df <- data.frame(value,genotype,gender) 

digits аргумент univariateTable может быть использован для округления (см ?univariateTable для справочной информации о функции).

tab = univariateTable(gender ~ Q(value) + genotype, data=df, digits=0) 

Чтобы изменить запятые для черточек, мы должны увидеть, где эти значения сохраняются в списке, возвращаемой univariateTable. Запустите str(tab), в котором показана структура списка. Обратите внимание, что значения заголовков в таблице выглядят, как они хранятся в tab$summary.groups$value и tab$summary.totals$value, так что мы будем редактировать эти:

tab$summary.groups$value = gsub(", ", " - ", tab$summary.groups$value) 
tab$summary.totals$value = gsub(", ", " - ", tab$summary.totals$value) 

tab 

    Variable  Level gender = F (n=150) gender = M (n=50) Total (n=200) p-value 
1 value median [iqr] -6 [-481 - 424] 203 [-167 - 544] 80 [-433 - 458] 0.118 
2 genotype   A   75 (50)   25 (50)  100 (50)   
3      B   75 (50)   25 (50)  100 (50) 1.000 
+0

вау большое решение. Я заменил бы '[iqr]' на '[IQR]' таким же образом? – Oposum

+0

Да. Просто выясните, где он находится в списке, и измените этот элемент списка. – eipi10

+0

звучит хорошо, спасибо снова – Oposum

Смежные вопросы