我有一个对象列表(Survey::svyciprop的输出),我正在try 提取它们的属性,以创建一个包含所有结果的数据框.

#example of an object
props_and_cis[[1]]
                2.5% 97.5%
var1     0.932 0.826  0.98

我已经想好了如何在单独的专栏中提取我想要的每一项:

var <- attr(props_and_cis[[1]],"names")
prop <- as.vector(props_and_cis[[1]])
ci_lower <- attr(props_and_cis[[1]], "ci")[1]
ci_upper <- attr(props_and_cis[[1]], "ci")[2]

我想遍历我的列表props_and_cis中的每个对象,并将提取的内容写入数据帧,例如:

tribble(
  ~variable, ~prop, ~ci_lower, ~ci_upper,
  var,prop,ci_lower,ci_upper
)

但我似乎不能让它起作用.有人能帮帮忙吗?

预计到达时间:

> dput(props_and_cis[[1]])
structure(c(var1 = 0.932403111115339), var = structure(0.00119910004765771, dim = c(1L, 
1L), dimnames = list("as.numeric(var1)", "as.numeric(var1)")), ci = c(`2.5%` = 0.825647967272783, 
`97.5%` = 0.975715067477937), class = "svyciprop")

推荐答案

编写一个函数来提取所需的数据.

extract_attr <- function(x) {
  v <- attr(x, "names")
  ci <- attr(x, "ci")
  y <- cbind(data.frame(var = v, prop = c(x)), as.data.frame(t(ci)))
  row.names(y) <- NULL
  y
}

extract_attr(props_and_cis[[1]])
#>    var      prop     2.5%     97.5%
#> 1 var1 0.9324031 0.825648 0.9757151

创建于2023-03-30,共reprex v2.0.2

然后,对列表成员执行lapply次函数,并对结果执行rbind次,以获得一个data.Frame.在下面的示例中,我重复已发布的数据示例,所有列表成员彼此相等.

res <- lapply(props_and_cis, extract_attr)
do.call(rbind, res)
#>    var      prop     2.5%     97.5%
#> 1 var1 0.9324031 0.825648 0.9757151
#> 2 var1 0.9324031 0.825648 0.9757151
#> 3 var1 0.9324031 0.825648 0.9757151

创建于2023-03-30,共reprex v2.0.2


Data

posted <-   structure(c(var1 = 0.932403111115339), 
                      var = structure(0.00119910004765771, dim = c(1L, 1L),
                                      dimnames = list("as.numeric(var1)", "as.numeric(var1)")),
                      ci = c(`2.5%` = 0.825647967272783, `97.5%` = 0.975715067477937), 
                      class = "svyciprop")

props_and_cis <- list(posted, posted, posted)

创建于2023-03-30,共reprex v2.0.2

R相关问答推荐

是否有R代码来判断一个组中的所有值是否与另一个组中的所有值相同?

有没有一种方法可以在子包上使用‘library()’中的‘exclub’参数?

如何根据包含相同值的某些列获取总额

如何替换R中数据集列中的各种字符串

如何从R中的字符串元素中减go 一个数字?

ggplot2中的X轴显示数值,单位为百,而不是十

如何在emmeans中计算连续变量的对比度

我不能在docker中加载sf

对于变量的每个值,仅 Select 包含列表中所有值的值.R

如何在R中描绘#符号?

Select 季度月值

`lazy_dt`不支持`dplyr/across`?

R中1到n_1,2到n_2,…,n到n_n的所有组合都是列表中的向量?

如何通过匹配R中所有可能的组合来从宽到长旋转多个列?

在不对R中的变量分组的情况下取两行的平均值

向R中的数据帧添加一列,该列统计另一列中每个唯一值的二进制观测值的数量

主题(Legend.key=Element_RECT(Fill=&Quot;White&Quot;))不起作用

如何将宽格式的患者信息数据高效地转换为患者计数的时间序列?

如何在内联代码中添加额外的空格(R Markdown)

如果满足条件,则替换列的前一个值和后续值