2016-01-24 101 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$valuetab$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