2014-10-16 5 views
1

Я пытаюсь вычислить доверительные интервалы для многих строк таблицы, используя цикл for, и хотел бы, чтобы вывод был более читабельным. Вот фрагмент того, как выглядят данные.Для печати цикла и таблицы в R

 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

Если df это имя ваших данных, и вы только хотите сделать это для того, где QUESTION является Q1 (см комментарии), затем

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, так что вы не нужно включать его в свой звонок.

+0

Awesome, Ричард. Я не делаю этого для всех строк - только там, где значение столбца = Q1. То, что вы предоставили, полностью работает, но есть все равно, чтобы исправить nrow (df) только для nrow (df = q1). Я пробовал nrow (df [QUESTION == q1]), но я не думаю, что это правильный путь. –

+0

Несомненно, просто подмножите данные с помощью 'df <- df [df $ QUESTION ==" Q1 ",]', а затем используйте 'df' в остальной части программы. Используйте другое имя, хотя вы не перезаписываете исходные данные. –

+0

@ J.OConnell. Я обновляю свой ответ, чтобы показать, что –

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