7

私は毎日 SPSS を使用していますが、本当に R を学ぼうとしています。私を妨げている主な理由は、私が行っている市場調査のためにテーブル、バナー、およびクロス集計を簡単に生成する必要があることです。SPSS のカスタム テーブル オプションが気に入っており、R でそれを複製する方法についてアドバイスを求めています。

R には SPSS よりも多くの利点があると思います。その 1 つは、再現可能なレポートのために LaTeX と統合できることです。SPSS は迅速な探索 (ポイント アンド クリック) には最適ですが、結果を取得してクライアントに受け入れられる成果物にパッケージ化する場合などには、多くのことが望まれます。バナー/クロスタブを必要な方法でしか作成できない場合は、それが必要です。

要するに、以下のようなレポートに値するテーブルを生成するためのオプションは何ですか? 参照用に 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 でそれらにすばやくアクセスできます。

4

6 に答える 6

2

「tables」パッケージの「tabular」関数を調べてみてください。参考になるかと思います。

于 2014-09-14T20:09:50.973 に答える
1

パッケージ psych をダウンロードしたところですが、変数ごとに分類された要約統計の表を作成するのに非常に適しています。stata と言うほどうまくフォーマットされません。テキストファイルに出力して、好きなようにフォーマットできると思います。

于 2010-07-29T18:03:57.977 に答える
1

これは、R では現在簡単なことではありません。このような出力を得るには、複数のパッケージから複数の関数をつなぎ合わせる必要がある可能性があります。

于 2010-07-29T17:08:24.517 に答える
1

userR 2010 では、このトピックに関するいくつかのプレゼンテーションが行われたため、これに対処しようとするパッケージが間もなく登場する可能性があります。

于 2010-07-30T15:05:51.947 に答える
0

LaTeXおよびHTMLにエクスポートするテーブルについては、 xtableパッケージを参照してください。ただし、他のパッケージがある場合もあります。これも有望に見えます。Sweaveについて聞いたことがありますか?

于 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 に答える