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
我试过了:
with()
- 我只能使用“with()”一次执行一个范围,例如:
with(DT, table (One, Residence))
- 这给了我一个FALSE行和一个TRUE行。
data.frames
要求我为每个州命名(“AK”,“AL”,“AR”等),但with()
已经知道了。
我也尝试了ddply
,但得到了每个计算的列表(4列中150个未标记的行 - 不是每个州50列中所需的3个标记行),所以我很明显做得不对。
非常感谢任何帮助。
答案 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