R 生成';ecdf&x27;在分组数据帧上

R 生成';ecdf&x27;在分组数据帧上,r,dplyr,R,Dplyr,如何存储分组数据帧的ecdf输出 大家好 我的数据如下所示: age lab value 20 wbc 7.0 20 wbc 6.5 20 rbc 3.5 30 rbc 4.0 30 plt 100 30 plt 120 40 wbc 5.0 40 wbc 7.5 40 rbc 4.1 ... ... ... 我想为所有可能的“年龄”-“实验室”组合的变量“值”生成并存储ecdf。输出应该是“ecdf”对象的列表。我计划在稍后的分析中使用这些e

如何存储分组数据帧的ecdf输出

大家好

我的数据如下所示:

age lab  value  
20  wbc  7.0   
20  wbc  6.5
20  rbc  3.5
30  rbc  4.0
30  plt  100
30  plt  120
40  wbc  5.0
40  wbc  7.5
40  rbc  4.1
... ...  ...
我想为所有可能的“年龄”-“实验室”组合的变量“值”生成并存储ecdf。输出应该是“ecdf”对象的列表。我计划在稍后的分析中使用这些ecdf,并将其应用于另一个数据集

到目前为止,我尝试的是:

data %>% group_by(age,lab) %>% do(ecdf(.$value))
到目前为止没有成功。我得到:

Error: Results 1, 2, 3, 4, 5, ... must be data frames, not ecdf/stepfun/function
有什么想法吗

解决了的 如果这对任何人都有帮助的话,我将原始数据帧拆分为两个因子,然后在第三列上使用lappy

spl <- split(data, list(data$age, data$lab))
ecdfs <- lapply(spl, function(x) ecdf(x$value)
spl我们可以使用

library(dplyr)
data %>% 
  group_by(age, lab) %>%
  do(data.frame(., newval = ecdf(.$value)(.$value)))

或者使用
变异

data %>% 
   group_by(age, lab) %>% 
   mutate(newval = ecdf(value)(value))
# A tibble: 9 x 4
# Groups:   age, lab [6]
#    age lab   value newval
#  <int> <chr> <dbl>  <dbl>
#1    20 wbc     7      1  
#2    20 wbc     6.5    0.5
#3    20 rbc     3.5    1  
#4    30 rbc     4      1  
#5    30 plt   100      0.5
#6    30 plt   120      1  
#7    40 wbc     5      0.5
#8    40 wbc     7.5    1  
#9    40 rbc     4.1    1  
它也可以是
summary
d

data %>%
   group_by(age, lab) %>%
   summarise(ecdfFun = list(ecdf(value)))
数据
数据感谢您的快速回复,但我不想计算现有数据的分位数。我想要的输出是“ecdf”本身(class=“ecdf”),我计划稍后在另一个数据集上应用它。@JohnCena然后,像在更新中一样将其存储在
列表中
data %>%
   group_by(age, lab) %>%
   summarise(ecdfFun = list(ecdf(value)))
data <- structure(list(age = c(20L, 20L, 20L, 30L, 30L, 30L, 40L, 40L, 
 40L), lab = c("wbc", "wbc", "rbc", "rbc", "plt", "plt", "wbc", 
 "wbc", "rbc"), value = c(7, 6.5, 3.5, 4, 100, 120, 5, 7.5, 4.1
 )), class = "data.frame", row.names = c(NA, -9L))