使用频率数据填充R中的数据帧

时间:2015-07-27 03:56:05

标签: r resampling

我正在尝试对现有的元分析进行建模,以检查其他假设(例如,进行随机效应分析)以及重新采样技术。有超过2,000个科目,但数据相当简单:二元结果,成功或失败,与结构化评估的分数(0-10)相关联。我有每个分数成功或失败的频率,嵌套在每个研究中。我正在寻找一种更简单的方法来创建数据集,而不是将其键入,或多次使用rep函数。

我希望每一行看起来像这样: Study_ID,Test_Result [0-10],结果[0或1]

例如,假设我只有两个研究和两个测试水平(1或2):研究1有35个成功,85个失败得分为“1”;分数为“2”,46次成功,83次失败。在研究2中,得分为“1”,共有78次成功,246次失败;得分为“2”,45次成功,96次失败。

仅使用提供的频率,我怎样才能最轻松地创建具有数百行数据的数据帧?

1 个答案:

答案 0 :(得分:1)

这可能有用,唯一需要修改以添加更多研究的是studies列表。

## Your specifications
## Put the lengths of each grouping/study in a list so it's easy to work with
studies <- list(
    study1 = c(35, 85, 46, 83),
    study2 = c(78, 246, 45, 96))
score <- rep(1:2, each=2) # 1 1 2 2
type <- rep(0:1, len=4)   # 0 1 0 1

## Repeat score/type by counts of each grouping/study
res <- lapply(studies, function(study)
    data.frame(
        score=rep(score, study),
        type=rep(type, study)
    ))

## Combine into data.frame
dat <- data.frame(study=rep(seq_along(studies), times=sapply(studies, sum)),
                  as.list(do.call(rbind, res)))
head(dat)
#   study score type
# 1     1     1    0
# 2     1     1    0
# 3     1     1    0
# 4     1     1    0
# 5     1     1    0
# 6     1     1    0

## Check counts
with(dat, table(type, score, study))
# , , study = 1
# 
#     score
# type   1   2
#    0  35  46
#    1  85  83
# 
# , , study = 2
# 
#     score
# type   1   2
#    0  78  45
#    1 246  96