按R中的组生成q1/q3作为变量
我有两个级别的数据(医院级别和地区级别),每个医院都有一个唯一的o:e:按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.
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”)]