如何编写循环来运行数据框的 t 检验?

2024-05-01

我遇到了对数据框中存储的某些数据运行 t 检验的问题。我知道如何一一做,但效率很低。请问如何写一个循环来实现呢?

例如,我在testData中获取了数据:

testData <- dput(testData)
structure(list(Label = structure(c(2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L
), .Label = c("Bad", "Good"), class = "factor"), F1 = c(0.647789237, 
0.546087915, 0.461342005, 0.794212207, 0.569199511, 0.735685704, 
0.650942066, 0.457497016, 0.808619288, 0.673100668, 0.68781739, 
0.470094549, 0.958591821, 1, 0.46908343, 0.578755283, 0.289380462, 
0.685117658, 0.296011479, 0.208821225, 0.461487258, 0.176144907, 
0.325684001), F2 = c(0.634327378, 0.602685034, 0.70643658, 0.577336318, 
0.61069332, 0.676176013, 0.685433524, 0.601847779, 0.641738937, 
0.822097452, 0.549508092, 0.711380436, 0.605492874, 0.419354439, 
0.654424433, 0.782191133, 0.826394651, 0.63269692, 0.835389099, 
0.760279322, 0.711607982, 1, 0.858631893), F3 = c(0.881115444, 
0.850553659, 0.855405201, 0.732706141, 0.816063806, 0.841134018, 
0.899594853, 0.788591779, 0.767461265, 0.954481259, 0.840970764, 
0.897785959, 0.789288481, 0.604922471, 0.865024811, 0.947356946, 
0.96622214, 0.879623595, 0.953189022, 0.960153373, 0.868949632, 
1, 0.945716439), F4 = c(0.96939781, 0.758302, 0.652984943, 0.803719964, 
0.980135127, 0.945287339, 0.84045753, 0.926053105, 0.974856922, 
0.829936068, 0.89662815, 0.823594767, 1, 0.886954348, 0.825638185, 
0.798524271, 0.524755093, 0.844685467, 0.522120663, 0.388604114, 
0.725126521, 0.46430556, 0.604943457), F5 = c(0.908895247, 0.614799496, 
0.529111461, 0.726753028, 0.942601677, 0.86641298, 0.75771251, 
0.88237302, 1, 0.817706498, 0.834060845, 0.813550164, 0.927107922, 
0.827680764, 0.797814872, 0.768118872, 0.271122929, 0.790632558, 
0.391325631, 0.257446927, 0.687042673, 0.239520504, 0.521753545
), F6 = c(0.589651031, 0.170481902, 0.137755423, 0.24453692, 
0.505348067, 0.642589538, 0.308854104, 0.286913756, 0.60756673, 
0.531315171, 0.389958915, 0.236113471, 1, 0.687877983, 0.305962183, 
0.40469629, 0.08012222, 0.376774451, 0.098261016, 0.046544022, 
0.201513755, 0.02085411, 0.113698232), F7 = c(0.460358642, 0.629499543, 
0.598616653, 0.623674078, 0.526920757, 0.494086383, 0.504021253, 
0.635105287, 0.558992452, 0.397770725, 0.543528957, 0.538542617, 
0.646897446, 0.543646493, 0.47463817, 0.385081029, 0.555731206, 
0.43769237, 0.501754893, 0.586155312, 0.496028109, 1, 0.522921361
), F8 = c(0.523850222, 0.448936418, 0.339311791, 0.487421437, 
0.462073661, 0.493421514, 0.464091025, 0.496938844, 0.5817454, 
0.474404602, 0.720114482, 0.493098785, 1, 0.528538582, 0.478233718, 
0.2695123, 0.362377901, 0.462252858, 0.287725327, 0.335584366, 
0.397324649, 0.469082387, 0.403397835), F9 = c(0.481230473, 0.349419856, 
0.309729777, 0.410783763, 0.465172146, 0.520935471, 0.380916463, 
0.422238573, 0.572283353, 0.434705384, 0.512705279, 0.358892539, 
1, 0.606926979, 0.370574926, 0.319739889, 0.249984729, 0.381053882, 
0.245597953, 0.22883148, 0.314061676, 0.233511631, 0.269890359
), F10 = c(0.592403628, 0.249811036, 0.256613757, 0.305839002, 
0.497637944, 0.601946334, 0.401643991, 0.302626606, 0.623582766, 
0.706254724, 0.435846561, 0.324357521, 1, 0.740362812, 0.402588813, 
0.537414966, 0.216458806, 0.464852608, 0.251228269, 0.181500378, 
0.31840514, 0.068594104, 0.253873772), F11 = c(0.490032261, 0.366486136, 
0.336749996, 0.421899324, 0.479339762, 0.527364467, 0.398297911, 
0.432190187, 0.584030586, 0.453666402, 0.526861753, 0.388880674, 
1, 0.615835576, 0.39058525, 0.350811433, 0.290220147, 0.397424867, 
0.288095106, 0.274852912, 0.340129804, 0.271099396, 0.305499273
)), .Names = c("Label", "F1", "F2", "F3", "F4", "F5", "F6", "F7", 
"F8", "F9", "F10", "F11"), class = "data.frame", row.names = c(NA, 
-23L))

我需要对具有两个独立组的每一列运行 t 检验,即几个特征“F1”到“F11”的“好”与“坏”。我尝试做类似的事情:

GoodF1 <- subset(testData, Label == 'Good', select=c("F1"))
BadF1  <- subset(testData, Label == 'Bad', select=c("F1"))
t.test(GoodF1$F1,BadF1$F1)

然后执行“F2”到“F11”的其余部分,但显然效率不高。如果您有更好的想法来循环运行它,我真的很感激。非常感谢。


这是一个简单的解决方案,不需要额外的包:

lapply(testData[-1], function(x) t.test(x ~ testData$Label))

Here testData[-1]指的是所有列testData但第一个(包含标签)。负索引用于排除数据。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何编写循环来运行数据框的 t 检验? 的相关文章

  • 在 R 中安全地计算算术表达式?

    Edit 好吧 由于似乎有很多混乱 我将稍微简化一下问题 您可以尝试回答下面的原始问题 或者您可以解决此版本并忽略该行下面的所有内容 我的目标是采用任意表达式并在极其受限的环境中对其进行评估 该环境将仅包含具有以下类型值的变量 数值向量 接
  • 从受密码保护的站点读取信息

    我一直在 R 教程中使用 readLines 从网站上抓取信息 我现在希望从我自己的网站提取数据 特别是 awstats 数据 但是该域受密码保护 有没有一种方法可以通过用户名和密码传递我需要的特定 awstats 数据的 url url
  • data.table 的包装函数

    我有一个已经使用 data frame 上下文编写的项目 为了缩短计算时间 我尝试利用 data table 的速度 我的方法是构造包装函数 读取帧 将它们转换为表 进行计算 然后转换回帧 这是一个简单的例子 FastAgg lt func
  • 读取不同文件夹深度的多个 csv 文件

    我想递归地将给定文件夹中的所有 csv 文件读入 Spark SQLDataFrame如果可能的话 使用单一路径 我的文件夹结构如下所示 我想包含具有一个路径的所有文件 resources first csv resources subfo
  • 根据 R 中的字符串模式选择行

    假设我有以下数据 df lt data frame name c TO for Turnover for people HC people Hello world beenie man apple pears TO is number c
  • 正则表达式提取美国邮政编码,但不提取假代码

    使用 XML 包和 XPath 从网站上抓取地址 有时我只能得到一个嵌入了我想要的邮政编码的字符串 提取邮政编码很简单 但有时会显示其他五位数字的字符串 以下是 df 中问题的一些变体 zips lt data frame id seq 1
  • 行方向变异的有效方法

    我有两个数据框 dfUsers and purchases使用以下代码生成 set seed 1 library data table dfUsers lt data table user letters 1 5 startDate sam
  • R正则表达式获取第二个下划线之前的所有文本

    s lt 1 343 43Hello 2 323 14 fdh 99H 在 R 中 我想使用正则表达式来获取第二个下划线之前的子字符串 如何使用一个正则表达式来完成此操作 另一种方法是用 分割 然后粘贴前两个 一些东西 paste sapp
  • R 中具有 p 值的相关矩阵

    假设我想要传导相关矩阵 library dplyr data iris iris gt select if is numeric gt cor y iris Petal Width method spearman gt round 2 现在
  • For 循环内的 For 循环 Javascript

    由于某种原因 该语句跳过了一些数据 我是否缺少一个 continue 语句某处或某事 这是代码 for var i 0 len data ORDER STATUS 0 ORDERS length i lt len i if data ORD
  • 如何不显示 ggplot 轴上的所有标签?

    I m trying to using ggplot2 to plot this But as you can see on the x axis you can t read anything 那么如何在 x 轴上显示每 10 年的值呢
  • R 3.5 - read.csv 无法读取 UTF-16 csv 文件

    我的代码如下 read csv http asic gov au Reports YTD 2018 RR20180420 001 SSDailyYTD csv skip 1 fileEncoding UTF 16 sep t header
  • R中具有特定条件的多列变异

    我有这个数据 M1 M2 M3 UCL 1 2 3 1 5 我想在这种情况下创建新列 如果M1大于UCL MM1将为 UP 否则为 NULL 如果M2大于UCL MM2将为 UP 否则为 NULL 如果M3大于UCL MM3将为 UP 否则
  • 如果值大于或小于,则替换数据框中的值

    我在 R 中操作数据帧时遇到问题 这是 R 中的基本内容 但我找不到执行此类操作的最佳命令 虚拟示例 Var1 20 300 39 Var2 49 23 91 Var3 0 239 210 我怎样才能用10如果值小于 则在第 2 列中10
  • ggplot2 中的中心图标题

    这个简单的代码 以及今天早上我的所有脚本 已经开始在 ggplot2 中给我一个偏离中心的标题 Ubuntu version 16 04 R studio version Version 0 99 896 R version 3 3 2 G
  • 使用 data.table 左连接

    假设我有两个数据表 s dataA A B 1 1 12 2 2 13 3 3 14 4 4 15 dataB A B 1 2 13 2 3 14 我有以下代码 merge test merge dataA dataB by A all d
  • Matlab 中是否有相当于 R 的 dput() 的函数?

    Matlab 中是否有相当于 R 的 dput 的函数 dput 将 R 对象的 ASCII 文本表示形式写入文件或连接 UPDATE 1 添加了递归和对单元格的支持 UPDATE 2 添加了对结构的支持 UPDATE 3 增加了对逻辑 整
  • R中data.frame(列表)的列平均值

    Data https i stack imgur com ZYsmv jpg 请 我需要计算此 data frame 中维吉尼亚币 Sepal Length 列的平均值 Sepal Length Sepal Width Petal Leng
  • SparkR 和 Sparklyr 之间导入 parquet 文件所需的时间差异

    我正在使用 databricks 导入镶木地板文件SparkR and sparklyr data1 SparkR read df dbfs data202007 source parquet header TRUE inferSchema
  • ggplot:类似于scale_color_steps()的有序因子的色标

    With scale color steps 我们可以通过设置low和high争论 一个例子 df lt data frame x rnorm 99 y rnorm 99 col rnorm 99 ggplot df aes x y col

随机推荐