将所有逻辑规则与矩阵并按相同顺序匹配

2024-04-28

例如,我有一个像这样的矩阵

dat <- cbind(1:10,11:20,21:30)
colnames(dat) <- paste0("x",1:ncol(dat))
dat
      x1 x2 x3
 [1,]  1 11 21
 [2,]  2 12 22
 [3,]  3 13 23
 [4,]  4 14 24
 [5,]  5 15 25
 [6,]  6 16 26
 [7,]  7 17 27
 [8,]  8 18 28
 [9,]  9 19 29
[10,] 10 20 30

我还有一个具有逻辑规则的向量,例如像这样

pat <- c("x1>1 & x2>12","x3>25","x1<x3 & x3>28")
pat
[1] "x1>1 & x2>12"       "x3>25"         "x1<x3 & x3>28"

I need to check the matrix for the execution of the rules, and the rules should work in the same sequence in which they are specified in the vector. For a better understanding, I will draw enter image description here

因此,我想得到一个带有两个参数的函数,一个矩阵dat和一个有规则的向量pat,并返回真/假。

如果有人愿意帮助我,我会很高兴

UPD========================================

我并不总是从函数中得到正确的答案f1, 可能是什么问题呢?

f1 <- function(pat, dat) {
  tmp <-  suppressWarnings(lapply(pat, function(x) 
    min(which( with(as.data.frame(dat), 
                    eval(parse(text = x)))))))
  tmp1 <- unlist(tmp)
  i1 <- any(sapply(tmp, is.infinite))
  if(i1) FALSE else identical(tmp1, sort(tmp1))
}

一些虚假数据

set.seed(25641)
dat <- matrix(data = sample(10,20,replace = T),ncol = 3)
colnames(dat) <- paste0("x",1:ncol(dat))

pat <- c("x1>5","x2>x1","x3>1")

> dat
     x1 x2 x3
[1,]  4  4  7
[2,]  9  3  4
[3,]  7  9  5
[4,]  3  2 10
[5,] 10  7 10
[6,]  5  6  4
[7,]  9  9  4

According to the data, it can be seen that the function f1 should return TRUE, but it returns FALSE enter image description here

f1(pat = pat,dat = dat)
[1] FALSE

这是一个循环模式的函数,将matrix to data.frame, while eval计算表达式,if评估后没有 TRUE 值返回 FALSE,否则检查是否unlist min索引与sorted one

f1 <- function(pat, dat) {
   tmp <-  suppressWarnings(lapply(pat, function(x) 
       min(which( with(as.data.frame(dat), 
           eval(parse(text = x)))))))
   tmp1 <- unlist(tmp)
   i1 <- any(sapply(tmp, is.infinite))
   if(i1) FALSE else identical(tmp1, sort(tmp1))
 }
   
f1(pat, dat)
#[1] TRUE

对于更新的

pat <- c("x1>1 & x2>12","x3>25","x1<x3 & x3>48")
f1(pat, dat)
#[1] FALSE
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将所有逻辑规则与矩阵并按相同顺序匹配 的相关文章

  • 查找数据帧列表中同一列中的所有重复值并将其转换为 NULL

    我有一个清单BELGIAN COAST list包含数百个数据帧 df1 df2 15 列 X 1000 行 每个数据帧的最后一列称为Chemicals并包含一些字符 例如Sulfate or Ammonia 但是这一列有很多行Chemic
  • R:将 readRDS 应用于 .Rds 文件名的列表对象

    我有几个包含数据帧对象的 Rds 文件 我想对每个文件应用一个函数并将数据帧绑定到单个数据帧中 但是 当我尝试从文件名列表中读取多个 Rds 文件时 我收到错误 FUN X i 中的错误 从连接读取时出错 readRDS 不适用于列表吗 R
  • 在 R 中绘制对数正态概率密度

    我正在尝试在 R 中生成对数正态概率密度图 其中包含 3 个不同的均值对数和标准差对数 我尝试了以下方法 但我的图表太丑了 看起来一点也不好看 x lt seq 0 10 length 100 a lt dlnorm x meanlog 0
  • 如何按 data.table 中的十分位数组计算统计数据

    我有一个 data table 想按组计算统计数据 R set seed 1 R DT data table a rnorm 100 b rnorm 100 这些组应该定义为 R quantile DT a probs seq 1 9 1
  • 如何将此“for”循环转换为向量解

    这个问题与 将嵌入其他文本的长州名称转换为两个字母的州缩写 https stackoverflow com questions 25582518 convert long state names embedded with other te
  • 为什么这些数字不相等?

    下面的代码显然是错误的 有什么问题 i lt 0 1 i lt i 0 05 i 1 0 15 if i 0 15 cat i equals 0 15 else cat i does not equal 0 15 i does not eq
  • 有没有一种简单的方法来判断存储在一个列表中的许多数据帧是否包含相同的列?

    我有一个包含许多数据框的列表 df1 lt data frame A 1 5 B 2 6 C LETTERS 1 5 df2 lt data frame A 1 5 B 2 6 C LETTERS 1 5 df3 lt data frame
  • 如何计算嵌套函数中的粘合表达式?

    我正在尝试嵌套一个函数 该函数将两个字符串粘合在一起 该函数使用组合字符串来命名数据帧的列 然而 问题似乎是粘合表达式没有足够早地评估为字符串 我可以 并且应该 强制在将表达式作为参数传递给另一个函数之前对其进行求值吗 library ti
  • ggplot散点图中的图例问题

    我想使用 ggplot 创建显示方法比较数据的散点图 绘图应包含原始数据 理想线和带误差的拟合线 图例应显示理想线和拟合线的线型 线宽 线颜色 我可以获得大部分我想要的东西 但是图例存在以下问题 图例显示每种线型有 2 条线 为什么 如何解
  • 如何匹配 R 中的所有匹配项?

    我有 1000 个名字的列表 说A 我还有另外 5 个名字的清单 说B 我想找出这5个名字出现在1000个号码列表中的第几行 例如 Amy 在 A 中可以出现 25 次 B 里有艾米 我想知道 Amy 出现在 A 中的哪些行 我以前使用过
  • ggplot2、R 中的单条形条形图

    我有以下数据和代码 gt ddf var1 var2 1 aa 73 2 bb 18 3 cc 9 gt gt dput ddf structure list var1 c aa bb cc var2 c 73L 18L 9L Names
  • 具有 dplyr、tidyverse 和 broom 的相关矩阵 - P 值矩阵

    全部 我想使用以下方法从相关矩阵中获取 p 值dplyr 和 或扫帚包 并同时测试多个变量 我知道其他方法 但 dplyr 对我来说似乎更简单 更直观 此外 dplyr 需要关联每个变量以获得特定的 p 值 这使得该过程更容易 更快 我检查
  • R 中的 Websocket

    我设法在 R 中建立到 Mtgox websocket 的连接 规格如下 url https socketio mtgox com mtgox Currency USD https socketio mtgox com mtgox Curr
  • R - tidyr - 变异并传播多列

    我在 R 中有以下数据框 my df test lt data frame V1 c 1 2 1 V2 c A B A V3 c S1 S1 S2 V4 c x x x V5 c y y y V6 c A B C V7 c D E F my
  • 更改计划的开始日期以优化资源

    我有很多工作需要在特定的时间间隔执行 然而 我们每天完成这项工作的资源有限 因此 我正在尝试优化开始时间日期 开始时间日期只能向前移动 不能向后移动 以便每天使用的资源与我们的预算更加不相似 这些函数在下面的示例中使用 Function t
  • 提取部分字符串值,创建新的列名称,并使数据框宽

    我想提取字符串列的最后一部分 始终用方括号括起来 将它们作为新列的名称 然后将数据从长调整为宽 并用这些值填充新列 例如 如果我有这个数据框 whatihave lt data frame v1 c abc effort def effor
  • 迭代字符串 R 的字符

    有人可以解释一下为什么这不会在 R 中单独打印所有数字 numberstring lt 0123456789 for number in numberstring print number 字符串不就是字符数组吗 在 R 中该怎么做 In
  • 根据R中的前一行和当前行按组计算

    我可以根据 R 中的前一行和当前行进行计算 对于此数据框 df A B 1 2 2 2 2 3 3 4 5 5 B2 A2 0 5 B1 我可以使用这段代码来计算这个函数 for i in 2 nrow df B i lt 1 2 B i
  • 在 Ubuntu Lucid 中从二进制安装 R 包

    我已经使用以下命令在 Ubuntu Lucid 中安装了 R sudo aptitude 安装 r base 当我尝试 install packages 时 它似乎会下载源代码 然后花费很长时间来编译它 我怎样才能像我在 Windows 上
  • 基于条件反应逻辑闪亮的 Flexdashboard

    我正在尝试有条件地进行一种类型的渲染 renderPlot 或其他 renderText 基于一些输入 这是我尝试过的 title Citation Extraction output flexdashboard flex dashboar

随机推荐