提取置信区间data.table

问题描述

我想要做的是为某个比例的上下置信区间设置列。

这是我所做的:

> #Create some sample data
> Frustration <- data.table(group = c('A','B','C'),trials = c(363,1398,139),surg = c(57,276,18))
> Frustration
   group trials surg
1:     A    363   57
2:     B   1398  276
3:     C    139   18
> 
> #try to get confidence levels. what I am expecting is CI to be a list of 2 elements,for each value of group,but I don't think that is working
> F2 <- Frustration[,.(CI = prop.test(surg,trials,conf.level = .75)['conf.int']),by = .(group)]
> F2
   group                    CI
1:     A   0.1350140,0.1816828
2:     B   0.1851178,0.2103210
3:     C 0.09701967,0.16972056
> 
> #lower is still a list here - I am stumped
> F3 <- F2[,.(lower = CI[[1]]),by = .(group)]
> F3
   group                 lower
1:     A   0.1350140,0.16972056

我认为混乱与列表以及数据表如何处理返回值有关。

感谢您的帮助,

大卫

解决方法

CI是一个list列。我们可以使用transpose并分配(:=

library(data.table)
F2[,c('lower','upper') := data.table::transpose(CI)][,CI := NULL][]
#Key: <group>
#    group      lower     upper
#   <char>      <num>     <num>
#1:      A 0.13501400 0.1816828
#2:      B 0.18511780 0.2103210
#3:      C 0.09701967 0.1697206
,

另一种解决方案可行,但这是一个简单的单行代码:

library(data.table)

Frustration <- data.table(group = c('A','B','C'),trials = c(363,1398,139),surg = c(57,276,18))

Frustration[,c("lower","upper") := 
              as.list(prop.test(surg,trials,conf.level = .75)$conf.int),by=group][]
#>    group trials surg      lower     upper
#> 1:     A    363   57 0.13501400 0.1816828
#> 2:     B   1398  276 0.18511780 0.2103210
#> 3:     C    139   18 0.09701967 0.1697206

甚至更简单,但是您必须进行一些重命名:

Frustration[,as.list(prop.test(surg,by=group]
#>    group         V1        V2
#> 1:     A 0.13501400 0.1816828
#> 2:     B 0.18511780 0.2103210
#> 3:     C 0.09701967 0.1697206

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...