1

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)        
    )

性別および年齢層固有の中央値を使用してバイナリ (LowWalkHrs) を作成したいと思います (たとえば、年齢層 = 1 および性別 = 1 の場合、中央値 = 2.1 (中央値は Excel を使用して見つけました))。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

私はかなり大きなデータセット (約 10,000 件の観測) を持っているので、Excel は問題外です。

R では、因子変数を使用していないように見えるカットとカット 2 と、(Error in $<-.data.frame( *tmp*, "lowWalkHrs", value = list(hourwalking = c(0.63, : 置換には 949 行があり、データには 11303 があります)。

4

2 に答える 2

2

これは遅いかもしれないと思いますが、うまくいくと思います:

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])) )
于 2013-05-14T17:13:01.947 に答える
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 を別のグループとして扱うために factor(...,exclude=NULL) が追加されました。

于 2013-05-15T12:24:45.583 に答える