2017-03-01 68 views
2

[R新手有一個簡單的數據表(DT)已在幾個美國家庭(NumHH)的數量(住宅):頻率表

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 

通過使用(),

with(DT, table(NumHH, Residence)) 

我能得到一個表,是接近我想要的東西:

 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 

但我需要一個表格來提供每個住所幾個範圍的頻率。該頻率的計算是這樣的:

##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() - 我唯一能夠做到一個範圍與「與()」一次,如: with(DT, table (One, Residence)) - 這給了我一個FALSE行和一個真正的行狀態。

  2. data.frames問我要命名每個州(「AK」,「AL」,「AR」等),但with()已經知道。

  3. 我也曾嘗試ddply,但(4列150個未標記行 - 而不是50列每個狀態所需的3個標行)獲得每個計算的列表,所以我顯然不這樣做是正確的。

任何幫助,非常感謝。

回答

3

使用?cut使用table之前建立的組:

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()來保持簡單,但是,這會產生'Error in cut.default:'x'必須是數字。'作爲一個R新手,我不明白爲什麼'NumHH'可以在前面的一個變量中用()來表示數值,但是當我們把它分解爲間隔時不能。 – Uzay26

+0

@ uzay26你的NumHH變量不是數字我猜。先用as.numeric轉換它。 – thelatemail