【问题标题】:Pairwise t test loop through dataframes contained in a list成对 t 测试循环遍历列表中包含的数据帧
【发布时间】:2023-03-16 03:57:02
【问题描述】:

我有一个非常大的数据框,其构建如下: Originaldf

我想在项目 A 中执行成对 t 检验,比较条件组内的测量值。所以我想看看对于与项目 A 相关的所有观察结果,对照组、测试组和安慰剂组的测量值之间是否存在差异(条件)。

我做的第一件事是使用 dplyr 的过滤功能将数据框拆分为一个列表。

Listdf <- split(originaldf, Item)

这行得通,我得到了一个包含 82 个元素的列表,其中一个数据框对应于原始数据框中的每个项目。

我现在正在尝试对列表的每个元素执行 pairwise.t.test 函数。我对 R 比较陌生,并且认为为这个过程编写一个循环虽然效率低下,但可以帮助我了解背景情况。我知道还有使用 lapply 功能的选项。我使用以下代码在 Listdf 上进行了尝试,我知道这很可能过于简单,但值得一试。 lapply(Listdf, pairwise.t.test(Value, Condition))

但是,我在因子(g)中收到错误错误:找不到对象“条件”。不确定是否有办法更具体地引用 Condition 以便可以找到它。我已经对使用以下代码的项目之一执行了单独的 pairwise.t.test。

pairwise.t.test(List$ItemA$Value, List$ItemA$Condition, p.adjust.method = "none")

但是,我认为这在 lapply 函数中不起作用,因为我希望它对 ItemA、ItemB、ItemC 等执行 t.test...

目前我尝试过的循环如下:

for (i in Listdf) {
 pairwise.t.test(List$i$logAddedConstant, List$i$Condition, p.adjust = "none")
}

为此,我收到错误“split.default(X, group) 中的错误:第一个参数必须是向量” 我相信这个错误对应于原始数据帧的原始拆分。但是我不太明白为什么这个错误会在代码中出现这么晚,因为数据帧的拆分没有问题。

我知道我可能遗漏了一些基本的东西,但我很困惑并且尝试了多种选择都无济于事。如果有人有其他想法或建议,我将非常感谢您的帮助。如果我应该添加更多信息,请告诉我。

【问题讨论】:

  • 如果您可以通过dput 添加data.frame originaldf 的结构而不是提供图片,那就太好了。这将使其他人更容易帮助回答您的问题。
  • 以后会做!不知道这是一个选项..谢谢你让我知道

标签: r dataframe loops


【解决方案1】:

我制作了一个非常简短的 data.frame 示例,它的结构与您的 originaldf 一样

df <- data.frame(Item = c("A", "B", "C", "A", "B", "C"), 
                 Value=runif(6), 
                 Condition=c("Control","Control","Control", "Test", "Test", "Test"))

Listdf <- split(df, df$Item)

使用简单的 for 循环

p <-list()
for (i in 1:length(Listdf)) {
  p[[i]] <- pairwise.t.test(Listdf[[i]]$Value, Listdf[[i]]$Condition, p.adjust = "none")
}

使用 lapply

p <- lapply(1:length(Listdf), function(x) {pairwise.t.test(Listdf[[x]]$Value, Listdf[[x]]$Condition, p.adjust = "none")})

【讨论】:

  • 哇,非常感谢!我没想过要使用另一个列表来收集所有结果。我也非常感谢您提供 lapply 替代方案,以便我可以更好地了解该功能的工作原理!我真的很感激它,并且肯定学到了一些对未来非常有帮助的东西! :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-01
  • 2019-10-13
  • 2018-11-13
  • 2021-11-22
  • 2017-12-14
相关资源
最近更新 更多