2017-06-01 15 views
0

私は問題を抱えていますが、テーブルを出力する場合は、SPSSからRへの統計分析スクリプトを変換しています。 私は最近tidyverseパッケージを使用し始めました。理想的には、それに対応するソリューションを見つけることが理想ですが、より一般的には、Rのためのいくつかのindepthテーブルトレーニングを指摘したいと思います。 。R tidyverseテーブルのプレゼンテーション

はとにかく...ここで私は複製するテーブルレイアウトです:

enter image description here

基本的にそれはここではFREQ

だいくつかのサンプルデータのためのいくつかのスクリプトです:

i <- c(201:301) 
ID <- sample(i, 200, replace=TRUE) 
i <- 1:2 
Category1 <- sample(i, 200, replace=TRUE) 
Category2 <- sample(i, 200, replace=TRUE) 
Category3 <- sample(i, 200, replace=TRUE) 
df <- data.frame(ID, Category1, Category2, Category3) 

これを試しました:

IDTab <- df %>% 
      mutate(ID = as.character(ID)) %>% 
      group_by(ID) %>% 
      summarise(C1_1 = NROW(Category1[which(Category1 == 1)]) 
        ,C1_2 = NROW(Category1[which(Category1 == 2)]) 
        ,C1_T = NROW(Category1) 
        ,C2_1 = NROW(Category2[which(Category2 == 1)]) 
        ,C2_2 = NROW(Category2[which(Category2 == 2)]) 
        ,C2_T = NROW(Category2) 
        ,C3_1 = NROW(Category3[which(Category3 == 1)]) 
        ,C3_2 = NROW(Category3[which(Category3 == 2)]) 
        ,C3_T = NROW(Category3)) 

しかし、これはあまりマニュアルですが、より多くの変数/レベルが含まれているため、作業負荷が明らかに増加します。もちろん、実際には、データフレームのテーブルではなく、必要なテーブルのデータフレームを作成しました。すべての分類は、実際のデータ構造ではなく、命名規則に基づいています。

ハードコアのおすすめ... Rテーブルトレーニングを歓迎します。

答えて

3

あなたはかなりのテーブルを作りたい場合は、(増加汎用性の荒い順)knitr::kablepander::panderztable::ztable、およびxtable::xtableの同類を見てみましょう。

以下のデータ処理の例では、探しているネストした表形式は表示されませんが、現在のコードよりもスケーラビリティが高く、必要なデータが得られます。


# Make dataframe 
set.seed(1234) 
i <- c(201:301) 
ID <- sample(i, 200, replace=TRUE) 
i <- 1:2 
Category1 <- sample(i, 200, replace=TRUE) 
Category2 <- sample(i, 200, replace=TRUE) 
Category3 <- sample(i, 200, replace=TRUE) 
df <- data.frame(ID, Category1, Category2, Category3) 

# Load packages 
library(dplyr) 
library(tidyr) 

# Get the count by 'Level' (1 or 2) per 'Category' (1, 2 or 3) for each ID 
df2 <- df %>% 
    # Gather the 'Category' columns 
    gather(key = Category, 
      value = Level, 
      -ID) %>% 
    # Convert all to character 
    mutate_each(funs(as.character)) %>% 
    # Group by and then count 
    group_by(ID, Category, Level) %>% 
    summarise(Count = n()) 

# Get the total count per 'Category' (1, 2 or 3) for each ID 
df3 <- df2 %>% 
    # Group by and then count 
    group_by(ID, Category) %>% 
    summarise(Count = sum(Count)) %>% 
    # Add a label column 
    mutate(Level = 'total') %>% 
    # reorder columns to match df2 
    select(ID, Category, Level, Count) 

# Finishing steps 
df4 <- df2 %>% 
    # Bind df3 to df2 by row 
    rbind(df3) %>% 
    # Spread out 'Level' into columns 
    spread(key = Level, 
      value = Count) 

# Tabulate 
knitr::kable(head(df4), format = 'markdown') 

|ID |Category | 1| 2| total| 
|:---|:---------|--:|--:|-----:| 
|201 |Category1 | 1| NA|  1| 
|201 |Category2 | NA| 1|  1| 
|201 |Category3 | NA| 1|  1| 
|202 |Category1 | 2| NA|  2| 
|202 |Category2 | 1| 1|  2| 
|202 |Category3 | 2| NA|  2| 

reprexためジェニーブライアンのおかげで)

関連する問題