【问题标题】:Dichotomize data by factor按因子二分数据
【发布时间】:2013-05-14 17:03:30
【问题描述】:

我需要根据两个因素创建一个二分法变量(希望这是可能的)。

假设我有数据:

    d <- data.frame ( 
    agegroup = c(2,1,1,2,3,2,1,3,3,3,3,3,1,1,2,3,2,1,1,2,1,2,2,3) ,
    gender = c(2,2,2,2,2,2,1,2,1,1,1,2,1,1,2,2,1,1,1,1,2,1,1,1) , 
    hourwalking = c(0.3,0.5,1.1,1.1,1.1,1.2,1.2,1.2,1.3,1.5,1.7,1.8,2.1,2.1,2.2,2.2,2.3,2.4,2.4,3,3.1,3.1,4.3,5)        
    )

我想使用特定于性别和年龄组的中位数(例如,当年龄组 = 1 和性别 = 1 时,中位数 = 2.1(使用 excel 找到中位数))创建一个二进制 (LowWalkHrs)。 LowWalkHrs 将是数据集中添加的变量,因此输出将是:

     agegroup gender hourwalk LowWalkHrs
        2       2       0.3       1
        1       2       0.5       1
        1       2       1.1       0
        2       2       1.1       1
        3       2       1.1       1
        2       2       1.2       0
        1       1       1.2       1
          ....
        3       1       5         0

我有一个相当大的数据集(大约 10k 观察),所以 Excel 是不可能的。

在 R 中,我尝试过 cut 和 cut2,它似乎不采用因子变量,还有 ddply,它给了我一个错误消息 ($&lt;-.data.frame(*tmp*, "lowWalkHrs", value = list(hourwalking = c(0.63, : 替换有 949 行,数据有 11303)。

【问题讨论】:

    标签: r median r-factor categorization


    【解决方案1】:

    我怀疑这可能会很慢,但我认为它有效:

    z <- mapply(d$agegroup, d$gender, d$hourwalking, FUN=function(a,g,h)
        as.numeric(h < median(d$hourwalking[d$agegroup==a & d$gender==g])) )
    

    【讨论】:

    • 它确实有效,我还没有在更大的数据集上尝试过,但我会的。谢谢!
    • 好的,尝试使用更大的数据集,我收到错误消息:mapply 中的错误(d$agegroup,d$gender,d$hourwalking,:零长度输入不能与那些混合非零长度。我的较大数据集中确实缺少数据,这是导致错误的原因吗?
    • 是的,[...] 中的内容不能很好地处理缺失值。
    • 修复了第一个问题....错误消息现在是:在 is.na(x) 中:is.na() 应用于“NULL”类型的非(列表或向量)。
    • 只需要一个“na.rm=TRUE”
    【解决方案2】:
    d <- data.frame ( 
        agegroup = c(2,1,1,2,3,2,1,3,3,3,3,3,1,1,2,3,2,1,1,2,1,2,2,3) ,
        gender = c(2,2,2,2,2,2,1,2,1,1,1,2,1,1,2,2,1,1,1,1,2,1,1,1) , 
        hourwalking = c(0.3,0.5,1.1,1.1,1.1,1.2,1.2,1.2,1.3,1.5,1.7,1.8,2.1,2.1,2.2,2.2,2.3,2.4,2.4,3,3.1,3.1,4.3,5)        
       )
    
    d$LowWalkHrs=1*with(d,hourwalking<ave(hourwalking,list(factor(agegroup,exclude=NULL),factor(gender,exclude=NULL)),FUN=median))
    

    为将 NA 视为单独的组而添加了因子(...,exclude=NULL)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多