2014-05-13 1 views
4

R에 긴 테이블을 작성하고 각 열의 자릿수와 서식을 제어 할 수 있기를 원합니다.각 열마다 다른 숫자 서식을 사용하는 write.table

R의 숫자 제어는 이전에 here으로 논의되었지만 2 열의 일부 열과 e의 지수로 작성된 다른 열을 원합니다.

내가 가지고있는 것은 :

> tab = format(round(Ind_B, 2), nsmall = 2) 
      logFC AveExpr  t P.Value adj.P.Val B 
PCL1  -1.50 7.90 -7.78 0.00  0.05 3.11 
CYB5  -1.33 9.48 -7.29 0.00  0.05 2.66 
YPL272C -1.14 9.84 -6.75 0.00  0.05 2.12 
... 

write.table (탭, 파일 = "table.txt")

는 내가 원하는

  logFC AveExpr  t P.Value adj.P.Val B 
PCL1  -1.50 7.90 -7.78 2.02e-05 4.66e-2 3.11 
CYB5  -1.33 9.48 -7.29 3.46e-05 4.66e-2 2.66 
YPL272C -1.14 9.84 -6.75 6.44e-05 4.66e-2 2.12 
... 
처럼 보이는 뭔가

입력 데이터 :

> dput(Ind_B[1:2,]) 
structure(list(logFC = c(-1.49824500263345, -1.33422303887252, 
-1.13608497712886), AveExpr = c(7.89908829447163, 9.47578470147621, 
9.83832131029262), t = c(-7.77827558246803, -7.29052621516572, 
-6.75274781106625), P.Value = c(2.0278944567463e-05, 3.46076798843179e-05, 
6.43472955950628e-05), adj.P.Val = c(0.0466525340114348, 0.0466525340114348, 
0.0466525340114348), B = c(3.11252319339325, 2.65697661688921, 
2.11618901483842)), .Names = c("logFC", "AveExpr", "t", "P.Value", 
"adj.P.Val", "B"), row.names = c("PCL1", "CYB5", "YPL272C"), class = "data.frame") 
+1

각 열에 'sprintf'를 적용 하시겠습니까? – Roland

+0

어떻게 그렇게 할 수 있는지 자세히 설명해 주시겠습니까? – jensjorda

+0

'Ind_B '가 어떤 종류의 데이터 구조인지 모르겠습니다. 'dput (Ind_B)'와 같은 입력 데이터를 제공해야합니다. – Roland

답변

4

@Ronald가 제안한 것을 수행하는 옵션은 다음과 같습니다. 서식 지정 벡터를 지정한 다음 데이터 프레임에 mapply을 지정하십시오. 모든 열은 이제 문자입니다.

sprintf_formats <- c(rep("%.2f", 3), rep("%.2e", 2), "%.2f") 
Ind_B_sprintf <- Ind_B 
Ind_B_sprintf[] <- mapply(sprintf, sprintf_formats, Ind_B) 
Ind_B_sprintf 
#  logFC AveExpr  t P.Value adj.P.Val B 
#PCL1 -1.50 7.90 -7.78 2.03e-05 4.67e-02 3.11 
#CYB5 -1.33 9.48 -7.29 3.46e-05 4.67e-02 2.66 
#YPL272C -1.14 9.84 -6.75 6.43e-05 4.67e-02 2.12 
str(Ind_B_sprintf) 
#'data.frame': 3 obs. of 6 variables: 
# $ logFC : chr "-1.50" "-1.33" "-1.14" 
# $ AveExpr : chr "7.90" "9.48" "9.84" 
# $ t  : chr "-7.78" "-7.29" "-6.75" 
# $ P.Value : chr "2.03e-05" "3.46e-05" "6.43e-05" 
# $ adj.P.Val: chr "4.67e-02" "4.67e-02" "4.67e-02" 
# $ B  : chr "3.11" "2.66" "2.12" 
관련 문제