2013-10-01 7 views
0

Я пытаюсь создать свою первую пользовательскую функцию в R (yay!). У меня сейчас есть что-то вроде работы, но я думаю, что это может быть улучшено.Подавление имен столбцов в матрице и функции циклирования

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

group1mean, group1sd, group2mean, group2sd, t-значение, p-значение.

В настоящее время, моя функция делает это. Тем не менее, он создает имена столбцов (например, V3 и V4), которые я хотел бы оставить пустым, и я хотел бы, чтобы он прошел через несколько зависимых переменных и автоматически добавлял результаты в новые строки в матрице. Прямо сейчас, я должен написать строку кода для каждой зависимой переменной вручную (в примере ниже видеоустройств являются PWB, SWB и EWB

Вот мой код до сих пор:.

data <- read.delim("~/c4044sol.txt", header=T) 

library(psych) 

proc.ttest <- function(dv,group,decimals) { 

    x1 <- describeBy((dv), (group), mat=TRUE) 
    stat1 <- t.test((dv) ~ (group)) 
    output1 <- c(paste (round(x1$mean[1], digits=(decimals)),"(", round(x1$sd[1], digits= (decimals)), ")", sep =" "), 
      paste (round(x1$mean[2], digits=(decimals)), "(", round(x1$sd[2], digits=(decimals)), ")", sep =" "), 
      round(stat1$statistic, digits=2), round(stat1$p.value, digits=3)) 

    return(output1) 
} 

toprow <- c("M (SD)", "M (SD)", "t", "p") 

outtable <- rbind(toprow, 
       proc.ttest(data$PWB, data$college, 2), 
       proc.ttest(data$SWB, data$college, 2), 
       proc.ttest(data$EWB, data$college, 2)) 


colnames(outtable) <- c("College graduate", "Less than college graduate", "", "") 
row.names(outtable) <- c("", "PWB", "SWB", "EWB") 

library(xtable) 
xtable(outtable) 

Так чтобы повторить, я хотел бы подавить имена столбцов «V3» и «V4» (оставьте их пустыми) и сделать код запущенным автоматически в списке переменных. Возможна ли любая из этих возможностей? Спасибо за ваше время.

+0

Здравствуйте, зачем конкретно нужны «пустые» имена столбцов? Что бы это сделало, что вы не можете сделать с именами столбцов? –

+0

У меня есть по существу две строки имен столбцов - одна для групп «колледж» и «не колледж», а другая для статистики, M1, SD1, M2, SD2, t, p. Поскольку это работает сейчас, когда вы используете xtable, он печатает «V3» выше t и «V4» выше p. Это не существенная информация для окончательного отчета. Так что это эстетическая штука. – graywolf97

+0

Является ли проблема одной из форматирования для вывода на печать или управления данными? Если последнее, похоже, что использование 'list'' data.frame's будет вашим лучшим выбором –

ответ

0

Попробуйте держать outtable у вас есть, но без toprow. Вместо этого используйте toprow в качестве названий:

toprow <- c("M (SD)", "M (SD)", "t", "p") 

outtable <- rbind(# toprow, 
       proc.ttest(data$PWB, data$college, 2), 
       proc.ttest(data$SWB, data$college, 2), 
       proc.ttest(data$EWB, data$college, 2)) 

names(outtable) <- toprow 
## note that the parens and spaces are 
## not best practices, but this should still 
## get your your desired results 
+0

Я вижу, что вы пытаетесь сделать здесь, и я понимаю, почему вы это сделаете. Однако это не работает для моих конкретных целей. Поскольку у меня есть статистика и имена групп, я хочу, чтобы они оба были в таблице. Поэтому мне нужен самый верхний ряд, чтобы быть групповыми лейблами «College Graduate» и «Less than college graduate». Затем сразу же ниже мне нужна другая строка, которая имеет метки для каждой статистики M (SD), M (SD), t, p. Ваше решение обрабатывает только второй набор. – graywolf97

+1

это не похоже на проблему обработки данных, а на проблему вывода/печати. Если да, я бы предложил использовать другие средства, в том числе 'cat'' print' и т. Д. –

+0

Я думаю, что вы, возможно, правы.Я думаю, что мне нужно фактически подавить имена столбцов с помощью функции печати и фактически включать все метки, которые я хочу в первых двух строках матрицы. Спасибо за помощь. – graywolf97

0

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

toptoprow <- c("College graduate", "Less than college graduate", "", "") 
toprow <- c("M (SD)", "M (SD)", "t", "p") 


outtable <- rbind(toptoprow,toprow, proc.ttest(PWB, college, 2), 
       proc.ttest(SWB, college, 2), 
       proc.ttest(EWB, college, 2)) 

И тогда подавляя COLNAMES с помощью функции печати (как это было предложено Рикардо) ...

print(xtable(outtable), hline.after=c(-1,1,nrow(outtable)),include.colnames=FALSE) 

Я все еще хотел бы автоматизировать функцию сам, так что я могу в идеале дать ему список имен переменных, она будет работать Functio n для каждой переменной и заполнить результаты в конечной матрице. Но один шаг ребенка в момент времени ...

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

  • Нет связанных вопросов^_^