R:使用 IFELSE 替代方案创建数据框的最快方法

2023-12-02

我有一个类似的问题,这个问题在这个线程上:使用 R,将矩阵中

但就我而言,假设我有更大的数据集和可变阈值。 我需要使用同一数据帧第一列上的值创建一个数据帧,其中包含从条件中检索的每个值。每条线的这些值都不同。

这是数据框的示例:

SNP        A1  A2   MAF     
rs3094315  G   A   0.172  
rs7419119  G   T   0.240  
rs13302957 G   A   0.081  
rs6696609  T   C   0.393 

这是我的代码示例:

seqIndividuals = seq(1:201)
for(i in seqIndividuals) {
  alFrequ[paste("IND",i,"a",sep="")] = ifelse(runif(length(alFrequ$SNP),0.00,1.00) < alFrequ$MAF, alFrequ$A1, alFrequ$A2)
  alFrequ[paste("IND",i,"b",sep="")] = ifelse(runif(length(alFrequ$SNP),0.00,1.00) < alFrequ$MAF, alFrequ$A1, alFrequ$A2)
}

我正在为“seqIndividuals”中的每个单独“i”创建两个新列,如果随机值低于“MAF”列,则从“A1”列检索值,如果高于“A2”列,则检索“A2”值。该代码运行良好,但随着数据集行和列(个体)的增长,时间也会显着增长。

有没有办法避免在这种情况下使用 IFELSE,据我了解它作为循环工作?我尝试生成随机值矩阵,然后替换它们,但需要相同的时间甚至更长的时间。

mtxAlFrequ = matrix(runif(length(alFrequ$SNP)*(201)),nrow=length(alFrequ$SNP),ncol=201)
mtxAlFrequ[mtxAlFrequ < alFrequ$MAF] = alFrequ$A1

Thanks!


一种选择是data.table

library(data.table)
nm1 <- paste0("IND", rep(letters[1:2], length(seqIndividuals)), 
                    rep(seqIndividuals, each = 2))
setDT(alFrequ)
for(j in seq_along(nm1)) {
      alFrequ[, nm1[j] := A2
             ][runif(.N, 0, 1) < MAF , nm1[j] := A1][]
}

基准测试

set.seed(24)
alFrequ <- data.frame(SNP= paste0('rs', sample(600000, 340000, replace=FALSE)),
                   A1 = sample(c("G", "T", "A", "C"), 340000, replace=TRUE),
                   A2 = sample(c("G", "T", "A", "C"), 340000, replace=TRUE),
                   MAF = runif(340000, 0, 1), stringsAsFactors=FALSE)
nm1 <- paste0("IND", rep(letters[1:2], length(seqIndividuals)), 
                          rep(seqIndividuals, each = 2))

system.time({
    setDT(alFrequ)
     for(j in seq_along(nm1)){
     alFrequ[, nm1[j] := A2][runif(.N, 0, 1) < MAF , nm1[j] := A1][]
   }
})
#   user  system elapsed 
#  10.72    1.05   11.76 

并在原始数据集上使用OP的代码

system.time({
 for(i in seqIndividuals) {
   alFrequ[paste("IND",i,"a",sep="")] = ifelse(runif(length(alFrequ$SNP),0.00,1.00) < 
          alFrequ$MAF, alFrequ$A1, alFrequ$A2)
   alFrequ[paste("IND",i,"b",sep="")] = ifelse(runif(length(alFrequ$SNP),0.00,1.00) < 
             alFrequ$MAF, alFrequ$A1, alFrequ$A2)
 }
})
#    user  system elapsed 
#   72.16    6.82   79.33 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

R:使用 IFELSE 替代方案创建数据框的最快方法 的相关文章

  • Python:按小时、天和月过滤 Pandas 中的数据帧(按年分组)

    作为 Pandas 的新手 我必须进行大量挖掘才能找到这个问题的解决方案 考虑到我仍然需要解决边界问题 我想知道更好的方法来解决这个问题 我有一组从 2009 年到 2012 年的 10 分钟 功率 测量值 并且希望获得所有年份的小时和日
  • R中的等值线绘图问题

    编辑 我已经意识到问题的根源 我只有我有数据的县的计数信息 该信息少于我正在绘制的区域中的县数量 按理说 问题代码行在这里 mapnames lt map county plot FALSE 4 names colorsmatched lt
  • 计算数据框中每一行的 R 条件运行总和

    我想创建一个等于 data Rating 的运行总和的列 假设第 3 列和第 4 列中有两个条件成立 特别是 data Year 换句话说 这应该计算直到上一年为止每个 id 的评分累积总和 它应该对数据框中的每一行 大约 50 000 行
  • 如何将环境变量传递给shinyapps

    我想将安全参数传递给shinyapps io部署 以便我的应用程序可以通过以下方式获取它们 Sys getenv PASSWORD X 我找不到任何相关内容deployApp函数在rsconnect包裹 您可以使用Renviron网站 or
  • plot xts if (on == "years") { 中的错误:缺少 TRUE/FALSE 需要的值

    我正在尝试绘制 xts 对象 但出现有关年份的错误 xts 对象只有一个数值和一个 POSIXct 索引 下面的代码显示了 xts 和尝试绘图时的错误 关于需要对 xts 对象做什么才能正确绘制的任何想法 xTest lt as xts 3
  • 当我用一个观察值运行回归时,为什么“fastLm()”会返回结果?

    为什么fastLm 当我用一项观察进行回归时返回结果吗 下面为什么不lm and fastLm 结果相等吗 library Rcpp library RcppArmadillo library data table set seed 1 D
  • 如何在折线图中显示 Sep-12 格式的数据并抑制网格线和灰色背景?

    我正在努力使日期格式正确 数据已经是melt 格式 数据中有四个变量碰巧共享相同的数据 我只是想绘制一个简单的四线折线图 每个变量作为一条单独的线 并将 Sep 12 显示为最新数据点 我正在使用旧的 ggplot 请随意 我有两个问题 第
  • 如何缩放(标准化)每列内的 ggplot2 stat_bin2d 值(按 X 轴)

    我有一个 ggplot stat bin2d 热图 library ggplot2 value lt rep 1 5 1000 df lt as data frame value df group lt rep 1 7 len 5000 d
  • 计算数据帧 R 中字符串的频率

    我想计算数据框中某些字符串的频率 strings lt c pi pie piece pin pinned post df lt as data frame strings 然后我想计算字符串的频率 counts lt c pi in pi
  • 如何使用to_sql将pandas数据帧写入oracle数据库?

    我是一个新的oracle学习者 我正在尝试将 pandas 数据帧写入 oracle 表中 经过网上研究 我发现代码本身很简单 但我不知道为什么我的代码不起作用 我已经从本地文件中读取了 pandas 数据框 import cx Oracl
  • python 中的基本矩阵转置

    我尝试了 python 中矩阵转置的最基本方法 但是 我没有得到所需的结果 接下来是代码 A 1 1 1 1 2 2 2 2 3 3 3 3 4 4 4 4 print A def TS A B A for i in range len A
  • linux下无法安装Cairo包

    我在本地下载该软件包并尝试安装它 但出现此错误 R CMD INSTALL l usr local lib64 R library Cairo 1 5 1 tar gz 我得到他的错误 checking for PNG support in
  • 使用 lpSolve 优化 R 团队名单

    我是 R 新手 有一个想要解决的特定幻想运动队优化问题 我见过其他帖子使用 lpSolve 来解决类似的问题 但我似乎无法理解代码 下面的示例数据表 每个球员都在一个球队中 扮演着特定的角色 有薪水 并且每场比赛都有平均得分 我需要的限制是
  • 如何正确调整 R 中 ggplot 的各个方面的大小,包括图例?

    我在 ggplot2 中制作散点图 然后使用 ggsave 导出特定宽度和高度的 PDF 但是 图形图例永远不会使用 ggsave 正确调整大小 其边框不会留在绘图内 是否有另一种方法可以同时调整 ggplot 所有部分的大小以便于导出 我
  • Bash:循环遍历字符串数组后无法读出带空格的字符串

    我正在使用循环读取数组的内容 该数组包含名为 music 的目录层次结构中的所有目录和文件 内容是 find 命令先前输出的字符串 这个想法是根据流派 艺术家和标题将 directory contents 中每个数组元素的完整目录路径分成子
  • 无法对列数据重新排序

    我有数据框而不是序列 如果我使用len df columns 我的数据有3586列 如何重新排序数据序列 ID V1 V10 V100 V1000 V1001 V1002 V990 V991 V992 V993 V994 A 1 9 0 2
  • R 中的输出,避免写“[1]”

    I use print从 R 中的函数输出 例如 print blah blah blah 这输出 1 blah blah blah 到控制台 我怎样才能避免 1 和引号 Use cat Your string type cat查看帮助页面
  • 如何使用 R 或 PowerShell 从文本文件中提取数据?

    我有一个包含如下数据的文本文件 This is just text Username SOMETHI C Text Account DFAG Finish time 1 JAN 2011 00 31 58 91 Process ID 202
  • R 中的聚类分析:确定最佳聚类数

    如何选择最佳的聚类数量来进行 k 均值分析 绘制以下数据的子集后 多少个簇比较合适 如何进行聚类树突分析 n 1000 kk 10 x1 runif kk y1 runif kk z1 runif kk x4 sample x1 lengt
  • Unity - 在生成时获取随机颜色

    我有一个小问题 我想在我的场景中生成四边形 它们都应该有红色或绿色作为材质 但 Random Range 函数只能是 int 我该如何解决它 void SpawningSquadsRnd rndColor 0 Color red rndCo

随机推荐

  • 如何在 Eclipse 中从验证中排除特定文件夹或文件?

    我们在单元测试中使用了一堆格式错误的 XML 文件来检查我们的应用程序是否可以处理它们 Eclipse 将此 XML 文件标记为错误 从而污染 问题视图 有没有办法从 Eclipse 验证器中排除特定文件夹 在窗口 gt 首选项的验证部分中
  • NSDateFormatter 返回 nil

    我正在尝试解析以以下格式传递的日期 2014 03 26T05 07 42 14286Z My NSDateFormatter代码看起来像这样 NSDateFormatter dateFormatter NSDateFormatter al
  • 如何在 Bash 中测试变量是否为数字?

    我只是不知道如何确保传递给我的脚本的参数是数字还是不是数字 我想做的就是这样 test isnumber 1 VAR 1 echo need a number 有什么帮助吗 一种方法是使用正则表达式 如下所示 re 0 9 if yourn
  • C#/WPF 应用程序实现应用 CLI 的简单 IPC 机制

    所以我在 Net 上阅读了大量有关进程间通信的内容 命名管道 远程处理 这一切看起来都很棒 但对于我需要做的事情来说可能有点过分了 我想向我的 WPF 应用程序添加一个命令行界面 因此我需要一种简单的 IPC 机制来将字符串从一个进程发送到
  • DosBox 中的向量头文件

    我正在使用 DosBox 0 74 我想使用向量函数 但我找不到它的头文件 它不是
  • 如何在 Android 上使用 VPN API? [关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 我正在探索 Android 中的 VPN 连接 我想知道如何使用应用程序在 Android 中设置 VPN 连接 我遇到了一些名为的示例代码ToyVpn 我运行了该应用程序 但我不知
  • testcafe 中其他几名跑步者的跑步大师?

    我有几个跑步者正在使用 Promise race 在特定时间完成测试用例 假设我有 runner1 js runner2 js runner3 js 如何创建主运行程序以便可以一起运行所有这些运行程序 const createTestCaf
  • 带有单引号和双引号的 bash 别名命令

    我有以下命令 svn status awk 1 M print 2 我如何用它来创建别名 我努力了 alias xx svn status awk 1 M print 2 你只需要正确地转义它 alias xxx svn status aw
  • 用户友好的错误页面在生产环境中不显示

    最近 我的生产环境中停止显示用户友好的错误页面 我正在使用 Rails 3 0 3 我的中有以下内容config environments production rb config action controller consider al
  • 调试在 dllhost.exe 中运行的 inproc com 服务器

    我正在编写一个在 dllhost exe 代理中运行的 inproc com dll 但在调试它时遇到了问题 如果同时运行多个 dllhost exe 找到正确的一个来附加调试器将会很烦人 如果有很多正在运行 有没有一种简单的方法可以识别您
  • 初学者从结构数组中删除第一个元素 (C)

    我有一个结构数组 实际上它是一个按优先级排序的堆数组 typedef struct char name MAX CHARACTERS 1 int priority person person p MAX HEAPSIZE 1 并想要删除数组
  • 使用 python 更快地搜索 Azure blob 名称?

    我有一个需要在 Azure 上搜索的文件名列表 现在 作为一个菜鸟 我正在循环每个 blob 名称并比较字符串 但我认为必须有最简单 快速的方法来完成此任务 当前的解决方案使我的 HTTP 响应非常慢 def ifblob exists s
  • 为什么 var_dump 可以确定私有变量的值,但在尝试访问单个属性时却不能

    我有一个对象被扔到会话数组中 我想运行 foreach 在 items 属性上 我似乎无法访问它 我看到它是私有的 但我忍不住想知道为什么 var dump 可以向我显示该属性包含的内容 但我无法读取数据 因为它会引发致命错误 我想如果我真
  • ruby on Rails 中的 Bootstrap 模式不起作用

    我正在尝试实现一个模式来为我的应用程序创建新用户 由于某种原因无法使其工作 这段代码只是淡入淡出 并且没有显示任何模式 我不明白为什么 事实上 我正在使用与此答案完全相同的代码如何使用 link to 添加引导模式 以便链接内容在模式中打开
  • 在 iOS 中将 PDF 文本写入 PDFContext

    通过以下方式绘制到 pdf 上下文非常简单 UIGraphicsBeginPDFContextToFile pdfFile CGRectZero nil UIGraphicsBeginPDFPageWithInfo sheet frame
  • UITableViewCell 内 UITableView 的动态行高度

    我有一个 主 UITableView 其中我使用从 xib 加载的不同单元格 其中一些单元格本身也有一个 UITableView 现在我已将每个单元格的行高设置为原始 xib 大小 但是 我希望高度动态并与 子 UITableView 中的
  • 尝试更新 MongoDb 数组元素时出错

    在我的 Azure CosmosDb MongoApi 中 我有带有嵌入文档数组的 JSON id ObjectId 5a95745df886842904b82f71 token value1 channel value2 urls url
  • 在 IF 语句中对数组使用 DelayedExpansion 索引变量失败

    我有一个批处理文件 其中显示目录中的所有 pem 文件 为用户提供选择一个文件的选项 此时只是尝试使用他们选择的数字来显示他们选择的文件 ECHO数组的内容 我相信不知何故 因为它位于 IF 语句内部 所以索引变量 selectedPem
  • Swift:#warning 等效项

    Swift 有类似的 warning 吗 它只是用于在 Xcode 自己的 GUI 中显示警告 我也对是否有 error 等效项感兴趣 苹果表示 pragma mark 即将推出 可能与此相同 Edit 从 Swift 4 2 开始 语言级
  • R:使用 IFELSE 替代方案创建数据框的最快方法

    我有一个类似的问题 这个问题在这个线程上 使用 R 将矩阵中 但就我而言 假设我有更大的数据集和可变阈值 我需要使用同一数据帧第一列上的值创建一个数据帧 其中包含从条件中检索的每个值 每条线的这些值都不同 这是数据框的示例 SNP A1 A