【发布时间】:2025-11-29 08:25:01
【问题描述】:
上下文:
- 我正在处理受访者级别的调查数据。我的每一行 数据框代表个人的调查回复。
- 我的数据框由来自最大差异实验的个体级效用估计值和 分类变量,指示个别调查受访者属于几个子组中的哪一个 居住。
- 每个子组变量都是具有两个级别的单个分类变量。然而,在我的 所需的输出,我想要一个数据框,其中每个子组的每个级别都有自己的列。
目标:
我想创建一个函数,对每个用户定义的子组进行递归 T 测试 数据框中的每个最大差异项,提取 T 检验输出的元素,并存储 数据框中的元素
以T统计结果为例,最终结果应该是这样的:
Males_T_stat Females_T_stat
MD_item1 2.71 2.5
MD_item2 1.71 1.5
MD_item3 0.71 0.5
当前代码:
- 现在,我专注于编写代码以迭代地执行 T 测试并存储每个测试的全部内容 列表中的输出对象。我曾经尝试过的代码如下:
创建一个测试数据框:
dat <- data.frame(
md1 = 1:60,
gender = factor(rep(c("m", "f"), 30)),
generation = factor(rep(c("a", "b"), 30)),
md2 = 61:120
)
指定我的受访者子组的名称(即分类变量)。
groupnames <- c("gender", "generation")
item_vec <- dat %>% select(contains(("md")))
group_vec <- dat[groupnames]
将子组名称向量转换为数据框。这一步可能是多余的,但我更喜欢使用数据框。
item_vec <- data.frame(item_vec)
group_vec <- data.frame(group_vec)
到目前为止,我已经尝试使用嵌套的 for 循环来运行 T 测试并将每个测试输出存储在一个列表中。此代码部分有效;对于“group_vec”中命名的每个子组,代码只为“item_vec”中的最后一项生成 T 检验结果。但是,我想要“item_vec”中每个项目的结果,这是我目前停滞的地方。
res <- list()
for (i in 1:length(group_vec)) {
res[[i]] <- list(test)
for (j in 1:length(item_vec)) {
test <- (t.test(item_vec[[j]] ~ group_vec[[i]]))
res[i] <- list(test)
}
}
res
提前感谢您提供的任何帮助!
【问题讨论】:
标签: r loops dplyr nested iteration