【问题标题】:Loop two data frames to make meta analysis循环两个数据框进行元分析
【发布时间】:2016-07-18 12:46:55
【问题描述】:

例如,我有 DF1DF2 具有相同的维度,

DF1
hr  se         m
1   0.5   1.5  a 
2   1.5   2.5  b
3   2.5   3.5  c
4   3.5   4.5  d

DF2
hr  se         m
5   4.5   5.5  a
6   5.5   6.5  b
7   6.5   7.5  c
8   7.5   8.5  d

我需要进行元分析。 我知道对于一个DF 的所有行,我可以将其设为

library(rmeta)
d <- meta.summaries(DF1$hr, DF1$se, names = DF1$m, method = c("fixed"))

但我想要的是对这两个数据框的每一行进行元分析。例如,DF1row 1DF2row 1 进行元分析。 我可能认为我需要循环或lapply 函数。 感谢您提供任何提示或建议。

【问题讨论】:

  • 我不清楚,你能提供一个你想要的输出示例吗?

标签: r analysis meta


【解决方案1】:

一种选择是只使用rbind,然后通过m 使用split 来获取列表:

df3 <- rbind(df1, df2)
split(df3, df3$m)

$a
  hr  se   x m
1  1 0.5 1.5 a
5  5 4.5 5.5 a

$b
  hr  se   x m
2  2 1.5 2.5 b
6  6 5.5 6.5 b

$c
  hr  se   x m
3  3 2.5 3.5 c
7  7 6.5 7.5 c

$d
  hr  se   x m
4  4 3.5 4.5 d
8  8 7.5 8.5 d

然后您可以使用for 循环或lapply 来获取结果。为此,只需 Google 搜索 for loop Rapply family R

【讨论】:

  • 你能帮我更多吗..我试过for loop。我试过for(i in 1:length(A)){ out&lt;-meta.summaries(A$hr, A$se, names = A$metabolite, method = c("fixed"))},其中A被拆分df
  • Close :) 我认为它应该是A[[i]]meta.summaries 函数中,因为A 是一个列表。使用 A[[i]] 提取第 i 个数据帧,然后可以在其上执行 $hr 等操作。
  • 抱歉打扰了:) 但如果我喜欢这个for (i in 1:length(A)) {out&lt;-meta.summaries(A[[i]]$hr, A[[i]]$se, names = A[[i]]$metabolite, method = c("fixed"))} 它会返回我arguments imply differing number of rows: 2, 0。应该是for (i,j)吗?
  • 啊,是的,你写了A[[i]]$metabolite。如果您使用的是示例数据,那么这将不起作用,因为 metabolite 列不存在。试试A[[i]]$m。如果您不使用示例数据,那么我无法立即想到原因。
  • 是的。我没有使用示例数据,mmetabolite 实际上是相同的。为简单起见,我将其设为m。总之非常感谢!这是一个很好的提示!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-15
  • 1970-01-01
  • 1970-01-01
  • 2021-05-08
  • 2013-11-06
相关资源
最近更新 更多