我有以下数据集:

PATH = c("5-8-10-8-17-20",
         "56-85-89-89-0-15-88-10",
         "58-85-89-65-49-51")
INDX = c(18, 89, 50)

data.frame(PATH, INDX)
PATH INDX
5-8-10-8-17-20 18
56-85-89-89-0-15-88-10 89
58-85-89-65-49-51 50

列路径具有表示数字系列的字符串,我希望能够从满足PATH <= INDX的字符串中 Select 最大的数字,即从路径中 Select 一个等于INDX的数字,或从PATH中 Select 一个小于INDX的最大数字

我想要的输出如下所示:

PATH INDX PICK
5-8-10-8-17-20 18 17
56-85-89-89-0-15-88-10 89 88
58-85-89-65-49-51 50 49

以下是我对答案的一些思考过程:

我知道如果我有一个像strsplit这样的函数,我可以用"-"来分隔每个字符串,按数字排列,然后用INDX减go ,从而 Select 最小的负数或零.然而,原始数据集相当大,我想知道是否有更快或更有效的方法来执行这项任务.

推荐答案

下面的方法应该是相当有效的,你的方法没有任何问题.

numpath <- sapply(strsplit(PATH, "-"), as.numeric)
maxindexes <- lapply(1:length(numpath), function(x) which(numpath[[x]] <= INDX[x]))
result <- sapply(1:length(numpath), function(x) max(numpath[[x]][maxindexes[[x]]]))
> result
[1] 17 89 49

R相关问答推荐

如何使用R Shiny中的条件面板仅隐藏和显示用户输入,同时仍允许运行基础计算?

如果行和大于值,则过滤

任意列的欧几里得距离

如何从R中的字符串元素中减go 一个数字?

为什么横向页面会导致officeverse中的页码/节头/页脚出现问题?

将向量组合到一个数据集中,并相应地命名行

如何根据R中其他列的值有条件地从列中提取数据?

如何在geom_col中反转条

条形图和在Ploly中悬停的问题

移除仪表板Quarto中顶盖和车身之间的白色区域

对于变量的每个值,仅 Select 包含列表中所有值的值.R

如何得到每四个元素向量R?

以相同的方式对每个表进行排序

在R中,如何从一系列具有索引名的变量快速创建数据帧?

通过初始的shiny 应用更新部署的shiny 应用的数据和参数,其中部署的应用程序显示为URL

如何从嵌套数据中自动创建命名对象?在R中

如何使用循环从R中的聚合函数创建列,而不会在名称中给出&q;$&q;?

有没有办法将勾选/审查标记添加到R中的累积关联图中?

如何修改Rust中的R字符串并将其赋给新的R变量,并使用extendr保留原始R字符串

移除y轴断开的geom_bar图的外框