r - 循环配对 data.frame 列以在 R 中进行 t.test
问题描述
在我的 data.frame 中D
(见打击)有8
成对的列。例如Q1_a
和Q1_b
,Q2_a
和Q2_b
...Q8_a
和Q8_b
.
t.test
我想知道如何使用每对作为 BASE R 中的输入来执行 a ?
例如,第一个t.test
是t.test(Q1_a, Q1_b)
,第二个是t.test(Q2_a, Q2_b)
... t.test(Q8_a, Q8_b)
。
D <- read.csv("https://raw.githubusercontent.com/izeh/m/master/s.csv")
解决方案
我们可以split
进入list
withsplit.default
然后循环list
with lapply
,使用匿名函数调用提取列并执行t.test
out <- lapply(split.default(D, sub("_.*", "", names(D))),
function(x) t.test(x[[1]], x[[2]]))
将sub
匹配 'D' 的列名中_
后跟字符 ( .*
) 的模式并替换为空白 ( ""
) 以便在 中list
,我们得到每个成对列 ('Q1_a', 'Q1_b', ..., 'Q8_a ', 'Q8_b')
如果我们使用tidyverse
,一个选项是转为“长”格式,然后应用summarise_at
library(dplyr)
library(tidyr)
D %>%
pivot_longer(everything(), names_to = c(".value", "grp"),
names_sep = "_") %>%
summarise_at(vars(-grp), ~ list(t.test(.[grp == 'a'], .[grp == 'b'])))
推荐阅读
- elasticsearch - 文本字段上的精确匹配搜索
- python - 熊猫聚合中的自定义函数非常慢
- angular - 如果小数部分在角度 7 中大于 0,则显示两位小数
- java - 为什么 HashMap 的 N 个条目和 HashSet 的 N 个条目在 Heap 中占用相同的空间?
- kubernetes - ffmpeg kubernetes pod 自动伸缩
- flutter - 如何使文本标签的大小与文本大小相同
- angular - 使用 routerLink 传递对象
- tensorboard - 如何在张量板上显示数值
- plotly-dash - 根据特定条件对散点图点进行不同的着色
- azure-cdn - Azure CDN 响应奇怪的结果