2つのカテゴリ変数のための分割表(クロス集計)を作成する方法?

Roy_Batty:

WHOダウン症候群のデータベースはあなたに別の変数に1M児で生まれたダウン症の赤ちゃんの数に関する情報を提供します。

私は、カテゴリ変数のために、絶対的相対的、および限界周波数でクロスタブを作成したいCountryYear

欲望の結果は次のようになります。


Year    |      1978           1979            1980      
Country |   ----------------------------------------------------------------------     
ALB     |      76.4             78.5              87.6            ...
AUT     |      87.6             67.9              80.0            …
AZE     |      90.5             78.5              64.8            …

私は物事のカップルを試してみました:

まず、三つの変数のための新たなDFを作成します:

DS <- dplyr::select(DownSyndrome, YEAR, COUNTRY_REGION, VALUE)

しかし、私はそれでテーブルを使用する方法を見つけ出す、およびクロス機能can't。

私は絶対周波数を得ることができました。


DS_wide <- DownSyndrome %>%
  pivot_wider(
    names_from = YEAR,
    values_from = VALUE)

しかし、その後、再び、私はここからの相対およびマージンの周波数を取得する方法を知りません。

すべてのヘルプは、感謝感謝されます

PS:

データベースへのリンク

データの画像

イアン・キャンベル:

ここだdplyrアプローチが。

最初の行は、あなたのコードに基づいて、広いフォームに長い形式に変換します。2行目は数字のみのパターンに一致する名前を持つすべての列に基づいて合計を計算します。第三のラインは、各国の相対合計を算出します。4行目の接尾辞合計列と列に割り当て、それらをすることによってのみ番号を持つすべての列を分割します_RELATIVE

library(tidyverse)
DownSyndrome %>%
  pivot_wider(names_from = YEAR,values_from = VALUE) %>%
  mutate(TOTAL = rowSums(.[grep("[0-9]+",names(.))],na.rm=TRUE)) %>%
  mutate(TOTAL_RELATIVE = TOTAL / sum(TOTAL)) %>%
  mutate_at(vars(matches("[0-9]+")), list(RELATIVE = ~ ./TOTAL))
# A tibble: 49 x 104
#   COUNTRY COUNTRY_GRP SEX   `2008` `2009` `2010` `2011` `2012` `2013` `2014` `2015` `2016` `2017` `1985` `1986` `1987` `1988`
#   <fct>   <fct>       <fct>  <int>  <int>  <int>  <int>  <int>  <int>  <int>  <int>  <int>  <int>  <int>  <int>  <int>  <int>
# 1 ALB     ""          ALL       32     29     42     39     18     28     14     29     23     16     NA     NA     NA     NA
# 2 AUT     ""          ALL       13     16     12      6      6      3     NA     NA     NA     NA     23     29     39     24
# 3 AZE     ""          ALL       38     51     52     42     32     38     49     36     32     38     NA     NA     NA     NA
# 4 BEL     ""          ALL      248    232    275    240    259    245     NA     NA     NA     NA     56    126    152    126
# 5 BGR     ""          ALL       22     32     27     32     38     17     32     32     18     24     NA     NA     NA     NA
# 6 BIH     ""          ALL       NA     NA     NA     NA     NA     NA     NA     NA     NA     NA     59     42     75     65
# 7 BLR     ""          ALL       69     60     44     61     46     50     56     53     63     56     NA     NA     NA     NA
# 8 CHE     ""          ALL      121    107    127    145    152    152    131    108    112     86     NA     NA     NA     NA
# 9 CZE     ""          ALL       43     49     46     53     49     45     45     43     NA     NA     NA     NA     NA    116
#10 DEU     ""          ALL      269    288    251    290    298    284    290    296    308    312     NA     NA     NA     NA

あなただけの相対値をしたい場合は、使用することができますselect

DownSyndrome %>%
  pivot_wider(names_from = YEAR,values_from = VALUE) %>%
  mutate(TOTAL = rowSums(.[grep("[0-9]+",names(.))],na.rm=TRUE)) %>%
  mutate(TOTAL_RELATIVE = TOTAL / sum(TOTAL)) %>%
  mutate_at(vars(matches("[0-9]+")), list(RELATIVE = ~ ./TOTAL)) %>%
  select(COUNTRY,matches("RELATIVE"),TOTAL_RELATIVE)

データ

DownSyndrome <- read.csv("~/HFA_604_EN.csv",skip = 25)

おすすめ

転載: http://10.200.1.11:23101/article/api/json?id=377410&siteId=1