2017-09-20 6 views
0

Rのグループによって変数としてQ1/Q3を生成し、各病院は、固有のOを有します分位とoの75%分位:私は正確な分位数を表示することができますRコードを見つけ が私は2つのレベルのデータ(病院レベル、領域レベル)を有する

hospid zipid o:e q1 q3 
    1  1 0.8 0.9 1.05 
    2  1 0.5 0.9 1.05 
    3  1 0.4 0.9 1.05 
    4  2 0.9 1.0 1.10 
    5  2 1.2 1.0 1.10 
    6  2 1.5 1.0 1.10 

ではなく それらの値を抽出する方法がわからおよび:zipidによるE、出力は次のようになるようにそれらの値に基づいて新しい変数を生成します。

do.call("rbind", tapply(data$oe, data$zipid, quantile)) 
      0%  25%  50%  75%  100% 
region1 0.93  0.99  1.02  1.04 1.11 
region2 0.54  0.92  1.02  1.07 1.16 

お勧めはありますか? ありがとうございます!

答えて

2
df$q1 = ave(df$o.e, df$zipid, FUN = function(x) quantile(x)[2]) 
df$q3 = ave(df$o.e, df$zipid, FUN = function(x) quantile(x)[4]) 
df 
# hospid zipid o.e q1 q3 
#1  1  1 0.8 0.45 0.65 
#2  2  1 0.5 0.45 0.65 
#3  3  1 0.4 0.45 0.65 
#4  4  2 0.9 1.05 1.35 
#5  5  2 1.2 1.05 1.35 
#6  6  2 1.5 1.05 1.35 

DATA

df = structure(list(hospid = 1:6, zipid = c(1L, 1L, 1L, 2L, 2L, 2L 
), o.e = c(0.8, 0.5, 0.4, 0.9, 1.2, 1.5), q1 = c(0.45, 0.45, 
0.45, 1.05, 1.05, 1.05), q3 = c(0.65, 0.65, 0.65, 1.35, 1.35, 
1.35)), .Names = c("hospid", "zipid", "o.e", "q1", "q3"), row.names = c(NA, 
-6L), class = "data.frame") 
+1

を作成するためにdata.tableを使用することができます(x、y))]) 'それはあなたの答えに含まれています。私はその部分を削除します – akrun

1

私たちは、私は `DF [C( "Q1"、 "Q3" を持っている方が良いと思い列

library(data.table) 
setDT(df)[, c('q1', 'q3') := as.list(quantile(o.e)[c(2, 4)]), zipid] 
df 
# hospid zipid o.e q1 q3 
#1:  1  1 0.8 0.45 0.65 
#2:  2  1 0.5 0.45 0.65 
#3:  3  1 0.4 0.45 0.65 
#4:  4  2 0.9 1.05 1.35 
#5:  5  2 1.2 1.05 1.35 
#6:  6  2 1.5 1.05 1.35 
関連する問題