Создать 'ecdf' на сгруппированном фрейме данных - PullRequest
0 голосов
/ 04 февраля 2019

Как сохранить вывод в формате 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 для переменной «value» для всех возможных комбинаций «age» - «lab».Вывод должен быть списком объектов "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

Есть мысли?

РЕШЕНО

Если это кому-нибудь поможет, я разделю исходный фрейм данных на два фактора, а затем использую ошибку в третьем столбце.

spl <- split(data, list(data$age, data$lab))
ecdfs <- lapply(spl, function(x) ecdf(x$value)

1 Ответ

0 голосов
/ 04 февраля 2019

Мы можем использовать

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

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))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...