生成“ECDF”一个分组的数据帧上

问题描述 投票:1回答:1

如何存储从分组数据帧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

有什么想法吗?

SOLVED

如果这有助于任何人,我通过两个因素分割原始数据帧,然后在第三列中使用的lapply。

spl <- split(data, list(data$age, data$lab))
ecdfs <- lapply(spl, function(x) ecdf(x$value)
r dplyr
1个回答
2
投票

我们可以用

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  

Update

如果我们要存储功能为一列,然后把它包在list

data %>% 
    group_by(age, lab) %>% 
    mutate(ecdfFun = list(ecdf(value)))

它也可以summarised

data %>%
   group_by(age, lab) %>%
   summarise(ecdfFun = list(ecdf(value)))

data

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))
© www.soinside.com 2019 - 2024. All rights reserved.