2017-03-01 23 views
2

R初心者あり、単純なデータテーブル、いくつかの米国の世帯(NumHH)の数を持っている(DT)(レジデンス):周波数テーブル

NumHH Residence 
6 AK 
4 AL 
7 AR 
6 AZ 
1 CA 
2 CO 
2 CT 
1 AK 
4 AL 
6 AR 
3 AZ 
1 CA 
6 CO 
3 CT 
5 AL 

を使用することにより

 Residence 
NumHH AK AL AR AZ CA CO CT 
    1 1 0 0 0 2 0 0 
    2 0 0 0 0 0 1 1 
    3 0 0 0 1 0 0 1 
    4 0 2 0 0 0 0 0 
    5 0 1 0 0 0 0 0 
    6 1 0 1 1 0 1 0 
    7 0 0 1 0 0 0 0 
:()、

with(DT, table(NumHH, Residence)) 

私は私が望むものに近いですテーブルを取得することができます

しかし、私は住居ごとにいくつかの範囲の頻度を提供するテーブルが必要です。周波数は、この方法で計算されています

##Frequency of ranges per State 
One <- DT$NumHH <=1        ##Only 1 person/household 
Two_Four <- ((DT$NumHH <=4) - (DT$NumHH <=1)) ##2 to 4 people in Household 
OverFour <- DT$NumHH >4       ##More than 4 people in HH 

理想的には、結果は次のようになります。

  Residence 
NumHH  AK AL AR AZ CA CO CT 
    One  1 0 0 0 2 0 0 
    Two_Four 0 2 0 1 0 1 2 
    OverFour 1 1 2 1 0 1 0 

私が試した:

  1. with() - 私はやることができています1つの範囲を "with()"と一緒に使用すると、 with(DT, table (One, Residence)) - これは私に偽の行と真の行を与えます。

  2. data.framesは、各状態(「AK」、「AL」、「AR」など)に名前を付けるように頼みますが、with()は既に知っています。

  3. 私もddplyを試しましたが、それぞれの計算のリストがあります(4つの列で150個のラベルなし行 - 各状態ごとに50列に表示された3行ではありません)。

ご協力いただきまして誠にありがとうございます。 tableを使用する前に、あなたのグループを確立するため

答えて

3

使用?cut

with(dat, table(NumHH=cut(NumHH, c(0,1,4,Inf), labels=c("1","2-4",">4")), Residence)) 
#  Residence 
#NumHH AK AL AR AZ CA CO CT 
# 1 1 0 0 0 2 0 0 
# 2-4 0 2 0 1 0 1 2 
# >4 1 1 2 1 0 1 0 
+0

おかげで、@thelatemail。私はあなたがwith()を使って簡単に保つことができたのが好きですが、これは 'Cut in Default'のエラーを生成します: 'x'は数値でなければなりません。 R Newbieとして、私は 'NumHH'が()で初期の1変数で数値になることは理解できませんが、それを区間に分解するのはなぜではありません。 – Uzay26

+0

@ uzay26あなたのNumHH変数は、私が推測している数値ではありません。 as.numericで最初に変換してください。 – thelatemail