Отмена вставки данных в рамках данных - PullRequest
0 голосов
/ 11 октября 2018

Я пытался вычислить доверительные интервалы для биномиальных распределений через пакет Hmisc R.В частности, я использовал функцию binconf, которая отлично справляется со своей задачей.

library(plyr)
library(Hmisc)

Student <- c("A", "B", "C")
TP <- c(13, 36, 43)
obs.pos <- c(16, 37, 48)

df <- data.frame(Student, TP, obs.pos)

df1 <- df %>% 
  plyr::mutate(Sen = binconf(TP, obs.pos, alpha = 0.05, method = "wilson", return.df = TRUE))

df1 %>% View()

#  Student TP obs.pos Sen.PointEst Sen.Lower Sen.Upper
#1       A 13      16    0.8125000 0.5699112 0.9340840
#2       B 36      37    0.9729730 0.8617593 0.9986137
#3       C 43      48    0.8958333 0.7783258 0.9546783

К сожалению, я чувствую, что функция создает фрейм данных в моем исходном фрейме данных, и это не позволяет мне применять базовые функции к моемувыходной больше.Например, я не могу выбрать столбцы (используя dplyr) или округленные цифры, потому что R не может найти созданные столбцы (такие как Sen.PointEst, Sen.Lower, Sen.Upper).Ниже приведена структура моего вывода.

df1 %>% str()

#'data.frame':  3 obs. of  4 variables:
# $ Student: Factor w/ 3 levels "A","B","C": 1 2 3
# $ TP     : num  13 36 43
# $ obs.pos: num  16 37 48
# $ Sen    :'data.frame':   3 obs. of  3 variables:
#  ..$ PointEst: num  0.812 0.973 0.896
#  ..$ Lower   : num  0.57 0.862 0.778
#  ..$ Upper   : num  0.934 0.999 0.955

Я бы хотел, чтобы все столбцы находились на первом уровне моего вывода, чтобы я мог легко применить все нормальные функции к своему выводу.

Спасибо за любую помощь!

Ответы [ 2 ]

0 голосов
/ 24 апреля 2019

Другая опция, использующая пакет tidyverse, которая справится с отсутствующими значениями.Это в настоящее время добавляет пару дополнительных столбцов, которые могут быть ошибкой ??

library(tidyverse)

Student <- c("A", "B", "C", "D", "E")
TP <- c(13, 36, 43, NA, 0)
obs.pos <- c(16, 37, 48, NA, 0)



df <- data.frame(Student, TP, obs.pos)


df %>% 
  nest(TP, obs.pos) %>% 
  mutate(out = map_if(
    data, .p = ~ !is.na(.$TP) & !is.na(.$obs.pos),
    .f = ~ Hmisc::binconf(.$TP, .$obs.pos, return.df = TRUE))) %>% 
  unnest(data, out) 


 Student TP obs.pos  PointEst     Lower     Upper TP1 obs.pos1
1       A 13      16 0.8125000 0.5699112 0.9340840  NA       NA
2       B 36      37 0.9729730 0.8617593 0.9986137  NA       NA
3       C 43      48 0.8958333 0.7783258 0.9546783  NA       NA
4       D NA      NA        NA        NA        NA  NA       NA
5       E  0       0       NaN       NaN       NaN  NA       NA
0 голосов
/ 11 октября 2018

У нас есть столбец data.frame внутри data.frame.Одним из вариантов сглаживания data.frame будет вызов data.frame в do.call

dfN <- do.call(data.frame, df1) 

Или другой вариант - вызов binconf в do

df %>% 
  do(data.frame(., Sen = binconf(.$TP, .$obs.pos, alpha = 0.05, method = "wilson")))
...