gpt4 book ai didi

r - 过滤位于 2 个数值向量之间的数据表行向量

转载 作者:行者123 更新时间:2023-12-04 10:11:25 26 4
gpt4 key购买 nike

我有一个类似于此的 data.table (df):

df <- read.table(header=TRUE, text='
ID AltID Crit1 Crit2 Crit3
1 1 1 5 10
1 2 3 7 15
1 3 2 6 11')

对于每个 Crit 列,我都有一个上限和下限,如下所示:

minCutoff = c(0, 5, 10)
maxCutoff = c(4, 7, 12)

从 data.table (df) 计算得出。

我想要一个函数来排除其中一个值超出范围的任何行。此外,我希望此函数能够处理可变数量的 Crit 列(例如 3 Crit 列、4 Crit 列等),因为我的输入数据可能会发生变化。

所以对于这个例子,第 1 行和第 3 行将被保留,但第 2 行将被丢弃,因为它的 Crit3 (15) > maxCutoff (12) 尽管有 Crit1Crit2 在可接受的范围内。因此输出将是:

ID AltID   Crit1   Crit2   Crit3
1 1 1 5 10
1 3 2 6 11

我尝试使用 for 循环来计算我拥有的列数,然后使用嵌套的 for 循环来使用诸如...之类的方法遍历行来解决此问题

for (c in 1:(ncol(df)-2)+2) 
{
for (r in 1:nrow(df))
{
between(df[r,c], minCutoff[c], maxCutoff[c])
}
}

*ncol(df)-2)+2 是由于围绕 ID 列工作

但是,现在我有一大堆 T/F 值,我无法汇总这些值以确定是应该保留还是丢弃某行。

我确信有一种神奇的 R 方法可以使这个过程更简单,但我不够熟练,看不到它。

如果有人有任何提示、技巧或其他线索可以为我指明正确的方向,我将不胜感激。

最佳答案

你不需要一个外部包只是为了使用between,base R可以做你想做的。

minCutoff <- c(0, 5, 10)
maxCutoff <- c(4, 7, 12)

cols <- grep("^Crit", names(df))

inx <- apply(df[cols], 1, function(x) all(minCutoff <= x & x <= maxCutoff))
df[inx, ]
# ID AltID Crit1 Crit2 Crit3
#1 1 1 1 5 10
#3 1 3 2 6 11

数据。

df <- read.table(text = "
ID AltID Crit1 Crit2 Crit3
1 1 1 5 10
1 2 3 7 15
1 3 2 6 11
", header = TRUE)

关于r - 过滤位于 2 个数值向量之间的数据表行向量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51770443/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com