Копировать сравнение "Пользовательские таблицы" в R - PullRequest
6 голосов
/ 29 июля 2010

Я использую SPSS каждый день, но действительно пытаюсь выучить R. Основная вещь, которая меня сдерживает, - это моя потребность легко создавать таблицы, баннеры и кросс-таблицы для исследования рынка, которое я делаю. Мне нравится опция Custom Tables в SPSS, и я ищу совет о том, как скопировать ее с R.

Я считаю, что R имеет массу преимуществ по сравнению с SPSS, одним из которых является возможность интеграции с LaTeX для воспроизводимых отчетов. SPSS отлично подходит для быстрого исследования (указать и щелкнуть), но оставляет желать лучшего, когда беру результаты и упаковываю их в приемлемый результат для клиентов и т. Д. Тем не менее, R настолько мощен, что я чувствую, что могу сделать все, что смогу. в этом, если бы я мог делать свои баннеры / кросс-таблицы так, как они мне нужны.

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

CTABLES 
  /VLABELS VARIABLES=age educ paeduc maeduc speduc prestg80 happy 
    DISPLAY=DEFAULT 
  /TABLE age [MEAN F40.3, VALIDN COMMA40.0] + educ [MEAN F40.3, VALIDN COMMA40.0] + paeduc [MEAN F40.3, VALIDN COMMA40.0] + maeduc [MEAN F40.3, VALIDN COMMA40.0] + speduc [MEAN F40.3, VALIDN COMMA40.0] + prestg80 [MEAN F40.3, VALIDN COMMA40.0] BY happy 
  /SLABELS POSITION=ROW 
  /CATEGORIES VARIABLES=happy ORDER=A KEY=VALUE EMPTY=INCLUDE TOTAL=YES POSITION=AFTER MISSING=EXCLUDE 
  /SIGTEST TYPE=CHISQUARE ALPHA=0.05 INCLUDEMRSETS=YES CATEGORIES=ALLVISIBLE 
  /COMPARETEST TYPE=MEAN ALPHA=0.05 ADJUST=BONFERRONI ORIGIN=COLUMN INCLUDEMRSETS=YES CATEGORIES=ALLVISIBLE MEANSVARIANCE=ALLCATS MERGE=NO 
  /COMPARETEST TYPE=PROP ALPHA=0.05 ADJUST=BONFERRONI ORIGIN=COLUMN INCLUDEMRSETS=YES CATEGORIES=ALLVISIBLE MERGE=NO.

Я приложил изображение того, как выглядит вывод. Меня особенно интересует возможность иметь несколько переменных в строках / столбцах, и мне нравится гибкость их вложения, если мне это нужно. На рисунке у меня есть несколько непрерывных переменных, вырезанных по категориальной переменной в столбце, а итоговая статистика размещена в строках. Кроме того, мне также очень нравится функция быстрого сравнения средних значений по столбцам, но фигура может быстро получить к ним доступ в R для условной генерации кросс-таблицы.

Ответы [ 6 ]

2 голосов
/ 15 сентября 2014

Попробуйте изучить «табличную» функцию из пакета «таблицы» . Я думаю, что это может быть полезно.

1 голос
/ 30 июля 2010

На useR 2010 было несколько презентаций на эту тему, поэтому вы можете вскоре увидеть больше пакетов, пытающихся решить эту проблему.

1 голос
/ 29 июля 2010

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

1 голос
/ 29 июля 2010

Это то, что в настоящее время нелегко в R. Вы, вероятно, должны объединить несколько функций из нескольких пакетов, чтобы получить вывод, подобный этому.

0 голосов
/ 02 февраля 2015

У меня также много раз возникали проблемы с не дружественным к пользователю выводом R ... Единственное решение, которое я нашел, было написание моей собственной функции, и я рад поделиться с вами здесь:

следующая функция возвращает для всех факторных переменных в data.frame частоту или процент (calc = "perc") для каждого уровня факторной переменной "variable".
Самым важным может быть то, что вывод представляет собой простой удобный data.frame.Поэтому нетрудно экспортировать результаты и работать с ними любым удобным для вас способом.

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

contitable <- function( survey_data, variable, calc="freq" ){    

  # Check which variables are not given as factor    
  # and exlude them from the given data.frame    
 survey_data_factor_test <- as.logical( sapply( Survey, FUN=is.factor) )    
  survey_data <- subset( survey_data, select=which( survey_data_factor_test ) )    

  # Inform the user about deleted variables    
  # is that proper use of printing to console during a function call??    
  # for now it worksjust fine...    
  flush.console()        
  writeLines( paste( "\n ", sum( !survey_data_factor_test, na.rm=TRUE),
            "non-factor variable(s) were excluded\n" ) )

  variable_levels <- levels(survey_data[ , variable ])    
  variable_levels_length <- length( variable_levels )    

  # Initializing the data.frame which will gather the results    
  result <- data.frame( "Variable", "Levels", t(rep( 1, each=variable_levels_length ) ) )    
  result_column_names <- paste( variable, variable_levels, sep="." )    
  names(result) <- c("Variable", "Levels", result_column_names )    

  for(column in 1:length( names(survey_data) ) ){       

      column_levels_length <- length( levels( survey_data[ , column ] ) )
      result_block <- as.data.frame( rep( names(survey_data)[column], each=column_levels_length ) )
      result_block <- cbind( result_block, as.data.frame( levels( survey_data[,column] ) ) )
      names(result_block) <- c( "Variable", "Levels" )

      results <- table( survey_data[ , column ], survey_data[ , variable ] )

      if( calc=="perc" ){ 
        results <- apply( results, MARGIN=2, FUN=function(x){ x/sum(x) }) 
        results <- round( results*100, 1 )
      }

      results <- unclass(results)
      results <- as.data.frame( results )
      names( results ) <- result_column_names
      rownames(results) <- NULL

      result_block <- cbind( result_block, results) 
      result <- rbind( result, result_block ) 
}    
result <- result[-1,]        
return( result )    
}    
0 голосов
/ 29 июля 2010

См. Пакет xtable для экспорта некоторых таблиц в LaTeX и HTML.Там могут быть и другие пакеты, хотя. Это также выглядит многообещающе.Вы слышали о Sweave?

...