如何从分组数据帧存储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)发布于 2019-02-04 15:09:35
我们可以用
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)))它也可以是summarised
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))https://stackoverflow.com/questions/54518977
复制相似问题