在数据框中取消嵌套数据框
Unnesting a dataframe within a dataframe
我一直在尝试通过 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
不幸的是,我觉得该函数在我的原始数据框中创建了一个数据框,这不允许我再在我的输出上应用基本函数。例如,我不能 select 列(通过使用 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
我希望所有列都在我的输出的第一级,以便我可以轻松地将所有正常函数应用到我的输出。
感谢您的帮助!
我们在 data.frame
中有一列 data.frame
。使 data.frame
变平的一种选择是在 do.call
内调用 data.frame
dfN <- do.call(data.frame, df1)
或者另一种选择是在 do
中调用 binconf
df %>%
do(data.frame(., Sen = binconf(.$TP, .$obs.pos, alpha = 0.05, method = "wilson")))
另一个使用 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
我一直在尝试通过 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
不幸的是,我觉得该函数在我的原始数据框中创建了一个数据框,这不允许我再在我的输出上应用基本函数。例如,我不能 select 列(通过使用 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
我希望所有列都在我的输出的第一级,以便我可以轻松地将所有正常函数应用到我的输出。
感谢您的帮助!
我们在 data.frame
中有一列 data.frame
。使 data.frame
变平的一种选择是在 do.call
data.frame
dfN <- do.call(data.frame, df1)
或者另一种选择是在 do
binconf
df %>%
do(data.frame(., Sen = binconf(.$TP, .$obs.pos, alpha = 0.05, method = "wilson")))
另一个使用 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