7

我每天都使用 SPSS,但一直在努力学习 R。阻碍我的主要事情是我需要轻松地为我所做的市场研究生成表格、横幅和交叉表。我喜欢 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.

我附上了一张输出的图片。我对在行/列中具有多个变量的能力特别感兴趣,并且喜欢在需要时灵活地嵌套它们。在图像中,我有一些连续变量被列中的分类变量切割,汇总统计信息放置在行中。顺便说一句,我也非常喜欢快速列均值比较的特性——但是 figure in 可以在 R 中快速访问它们以生成条件交叉表。

4

6 回答 6

2

尝试从“tables”包中探索“tabular”函数。我认为这可能会有所帮助。

于 2014-09-14T20:09:50.973 回答
1

这在 R 中目前并不容易。您可能必须将来自多个包的多个函数串在一起才能获得这样的输出。

于 2010-07-29T17:08:24.517 回答
1

我刚刚下载了 psych 包,它非常擅长生成按变量分解的汇总统计表。它的格式不如 stata 好。我认为您可以将其输出到文本文件中,然后按照您想要的方式对其进行格式化。

于 2010-07-29T18:03:57.977 回答
1

在 userR 2010 上有几个关于这个主题的演讲,所以你很快就会看到更多试图解决这个问题的包。

于 2010-07-30T15:05:51.947 回答
0

有关导出到 LaTeX 和 HTML 的某些表格,请参阅xtable包。不过,可能还有其他软件包。看起来也很有希望。你听说过斯威夫吗?

于 2010-07-29T15:25:19.107 回答
0

我也多次遇到不友好的 R 输出问题......我发现的唯一解决方案是编写自己的函数,我很高兴在这里与您分享:

以下函数为 data.frame 中的所有因子变量返回因子变量“变量”的每个级别的频率或百分比 (calc="perc")。
最重要的可能是输出是一个简单的用户友好的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 )    
}    
于 2015-02-01T21:09:25.470 回答