Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
按R中的组生成q1/q3作为变量_R_Data Management - Fatal编程技术网

按R中的组生成q1/q3作为变量

按R中的组生成q1/q3作为变量,r,data-management,R,Data Management,我有两个级别的数据(医院级别和地区级别),每个医院都有一个唯一的o:e: hospid zipid o:e 1 1 0.8 2 1 0.5 3 1 0.4 4 2 0.9 5 2 1.2 6 2 1.5 我想通过zipid生成o:e的25%分位数和75%分位数,因此输出如下: hospid zipid o:e q1 q3 1 1 0.8 0.

我有两个级别的数据(医院级别和地区级别),每个医院都有一个唯一的o:e:

hospid zipid  o:e
  1      1    0.8
  2      1    0.5
  3      1    0.4
  4      2    0.9
  5      2    1.2
  6      2    1.5
我想通过zipid生成o:e的25%分位数和75%分位数,因此输出如下:

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
我发现一个R代码可以显示精确的分位数,但不知道如何提取 并根据这些值生成新变量

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
有什么建议吗? 谢谢

数据

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")
数据

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

我们可以使用
data.table
创建列

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

我们可以使用
data.table
创建列

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

我认为最好有
df[c(“q1”,“q3”)]我认为最好有
df[c(“q1”,“q3”)]