r - 将列表对象操作到数据框中
问题描述
library(survey)
我有这样的数据。我正在使用调查包来生成名为 vars 的向量中每个变量的 MEAN、SE 和 FREQ。我是在 R 中操作列表的新手,非常感谢您的帮助!
df <- data.frame(
married = c(1,1,1,1,0,0,1,1),
pens = c(0, 1, 1, NA, 1, 1, 0, 0),
weight = c(1.12, 0.55, 1.1, 0.6, 0.23, 0.23, 0.66, 0.67))
vars <- c("weight","married","pens")
design <- svydesign(ids=~1, data=df, weights=~weight)
myfun <- function(x){
means <- svymean(as.formula(paste0('~(', x, ')')), design, na.rm = T)
table <- svytable(as.formula(paste0('~(', x, ')')), design)
results <- list(svymean = means, svytable = table)
return(results)
}
lapply(vars, myfun)
输出如下所示:
[[1]]
[[1]]$svymean
mean SE
weight 0.79791 0.1177
[[1]]$svytable
weight
0.23 0.55 0.6 0.66 0.67 1.1 1.12
0.46 0.55 0.60 0.66 0.67 1.10 1.12
[[2]]
[[2]]$svymean
mean SE
married 0.91085 0.0717
[[2]]$svytable
married
0 1
0.46 4.70
[[3]]
[[3]]$svymean
mean SE
pens 0.46272 0.2255
[[3]]$svytable
pens
0 1
2.45 2.11
我想提取/操作上面的这个列表来创建一个看起来更像这样的数据框:
question mean SE sum_svytable
weight 0.797 0.1177 5.16
married 0.910 0.071 5.16
如您所见,sum_svytable 是在 $svytable 生成的列表中为每个变量生成的频率总和。尽管在我的示例中这个数字对于每个变量(全部为 5.16)都是相同的,但在我的数据集中却不一样。
sum_svytable was derived like this:
output of myfun function for weight:
[[1]]$svytable
weight
0.23 0.55 0.6 0.66 0.67 1.1 1.12
0.46 0.55 0.60 0.66 0.67 1.10 1.12
I simply summed the frequencies for each response:
sum_svytable(for weight) = 0.46 +0.55+ 0.60+ 0.66+ 0.67+ 1.10+ 1.12
我不介意这个结果是如何得出的,我只需要它在 df 中!
这可能吗?
解决方案
一个选项是循环list
来自“myfun”的输出,然后提取组件“svymean”,创建一个 data.frame,sum
从“svytable”元素添加 s列,然后rbind
从list
元素中创建“问题”列行名
out <- lapply(vars, myfun)
lst1 <- lapply(out, function(x)
cbind(setNames(as.data.frame(x$svymean), c("mean", "SE")),
sum_svytable = sum(x$svytable)))
out1 <- do.call(rbind, lst1)
out1$question <- row.names(out1)
row.names(out1) <- NULL
out1[c('question', 'mean', 'SE', 'sum_svytable')]
# question mean SE sum_svytable
#1 weight 0.7979070 0.1177470 5.16
#2 married 0.9108527 0.0716663 5.16
#3 pens 0.4627193 0.2254907 4.56
推荐阅读
- authentication - 将 HTML 从 https 转换为 PDF 需要身份验证
- javascript - 如何从 node.js 中的表单获取输入数据?
- react-native - 如何在本机反应中设置标签样式?
- node.js - 清洁架构 - 如何处理用例依赖项
- python - OpenCV python findContours错误结果
- php - PHP var_dump 计算过多的字符
- javascript - Knex.js:加入 'select' 和 'where' 子句
- javascript - 子组件中按钮的父状态始终为空
- javascript - cypress,存根窗口函数并获取调用参数或返回值
- c - fopen 给我一个分段错误