R

时间:2017-03-01 01:05:57

标签: r

R Newbie 有一个简单的数据表(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(),

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()”一次执行一个范围,例如: with(DT, table (One, Residence)) - 这给了我一个FALSE行和一个TRUE行。

  2. data.frames要求我为每个州命名(“AK”,“AL”,“AR”等),但with()已经知道了。

  3. 我也尝试了ddply,但得到了每个计算的列表(4列中150个未标记的行 - 不是每个州50列中所需的3个标记行),所以我很明显做得不对。

  4. 非常感谢任何帮助。

1 个答案:

答案 0 :(得分: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