gpt4 book ai didi

r - 在分组数据帧上生成 'ecdf'

转载 作者:行者123 更新时间:2023-12-04 14:21:19 24 4
gpt4 key购买 nike

如何存储来自分组数据框的 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)

最佳答案

我们可以使用

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

关于r - 在分组数据帧上生成 'ecdf',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54518977/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com