如何存储分组数据帧中的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
有什么想法吗?
解决了如果这对任何人都有帮助,我将原始数据帧分为两个因素,然后在第三列上使用lapply。
spl <- split(data, list(data$age, data$lab))
ecdfs <- lapply(spl, function(x) ecdf(x$value)
答案 0 :(得分:1)
我们可以使用
library(dplyr)
data %>%
group_by(age, lab) %>%
do(data.frame(., newval = ecdf(.$value)(.$value)))
或与mutate
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
如果我们要将函数存储为列,则将其包装在list
data %>%
group_by(age, lab) %>%
mutate(ecdfFun = list(ecdf(value)))
也可以summarise
d
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))