对于R中的循环和表格打印

时间:2014-10-16 01:38:07

标签: r loops formatting

我尝试使用for循环计算表的多行的置信区间,并希望输出更具可读性。以下是数据外观的片段。

       QUESTION X_YEAR X_PARTNER  X_CAMP       X_N      X_CODE1 
1     Q1    2011      SCSD           ITC    15       4      
2     Q1    2011      SCSD    Nottingham     4       1      
3     Q1    2011      SCSD           ALL    19       5      
4     Q1    2011        CP           CP1    18       4      
5     Q1    2011       ALL           ALL    37       9      
6     Q1    2012      SCSD           ITC     8       1      
7     Q1    2012      SCSD    Nottingham     8       2      
8     Q1    2012      SCSD           ALL    16       3      
9     Q1    2012        CP           CP1    18       2      
10    Q1    2012        CP           CP1    22       2      
11    Q1    2012        CP            ALL    40      4      

我试图打印一个置信区间,包括问题,年份和营地。我希望输出像这样的表格形式

QUESTION   YEAR  CAMP         X   N  MEAN LOWER UPPER
Q1         2011  ITC          4   15  0.26 0.07 0.55
Q1         2011 NOTTINGHAM    1   4   0.25 0.006 0.8

前三列是直接从数据表中获取的,而后者4是从置信区间测试中提取出来的。

我目前正在使用的代码:

for (i in 1:26){
    print(data[i,1],max.levels=0)
    print(data[i,2],max.levels=0)
    print(data[i,4],max.levels=0)
    print(binom.confint(data[i,6],data[i,5],conf.level=0.95,methods="exact"))
    }

提供的输出(我有比片段更多的数据)过于耗费时间来筛选...

[1] Q1
[1] 2011
[1] ITC
  method x  n      mean      lower     upper
1  exact 4 15 0.2666667 0.07787155 0.5510032
[1] Q1
[1] 2011
[1] Nottingham
  method x n mean       lower     upper
1  exact 1 4 0.25 0.006309463 0.8058796

感谢任何建议!

1 个答案:

答案 0 :(得分:1)

如果df是您的数据的名称,并且您只想在QUESTIONQ1 library(binom) df2 <- df[df$QUESTION == "Q1",] x <- vector("list", nrow(df2)) for(i in seq_len(nrow(df2))) { x[[i]] <- binom.confint(df2[i,6], df2[i,5], methods = "exact") } cbind(df2[c(1,2,4)], do.call(rbind, x)[,-1]) # QUESTION X_YEAR X_CAMP x n mean lower upper # 1 Q1 2011 ITC 4 15 0.26666667 0.077871546 0.5510032 # 2 Q1 2011 Nottingham 1 4 0.25000000 0.006309463 0.8058796 # 3 Q1 2011 ALL 5 19 0.26315789 0.091465785 0.5120293 # 4 Q1 2011 CP1 4 18 0.22222222 0.064092048 0.4763728 # 5 Q1 2011 ALL 9 37 0.24324324 0.117725174 0.4119917 # 6 Q1 2012 ITC 1 8 0.12500000 0.003159724 0.5265097 # 7 Q1 2012 Nottingham 2 8 0.25000000 0.031854026 0.6508558 # 8 Q1 2012 ALL 3 16 0.18750000 0.040473734 0.4564565 # 9 Q1 2012 CP1 2 18 0.11111111 0.013751216 0.3471204 # 10 Q1 2012 CP1 2 22 0.09090909 0.011205586 0.2916127 # 11 Q1 2012 ALL 4 40 0.10000000 0.027925415 0.2366374 的地方执行此操作(请参阅评论),那么

conf.level = 0.95

请注意,binom.confint是{{1}}的默认设置,因此您无需在通话中加入此内容。