【问题标题】:frequency table with several CALCULATED variables in RR中带有几个计算变量的频率表
【发布时间】:2017-03-01 01:05:56
【问题描述】:

R Newbie 有一个简单的数据表 (DT),其中包含几个美国 (Residences) 的家庭数量 (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 个标记行),所以我显然没有做对的。

非常感谢任何帮助。

【问题讨论】:

    标签: r


    【解决方案1】:

    在使用table之前先使用?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
    

    【讨论】:

    • 谢谢,@thelatemail。我喜欢你可以通过使用 with() 来保持简单,但是,这会产生“cut.default 中的错误:'x' 必须是数字。”作为一个 R 新手,我不明白为什么 'NumHH' 在早期的单变量 with() 中可以是数字,但当我们将其分解为区间时则不行。
    • @uzay26 我猜你的 NumHH 变量不是数字。先用 as.numeric 转换。
    猜你喜欢
    • 2012-08-04
    • 2016-11-18
    • 1970-01-01
    • 2019-11-24
    • 2020-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多