如何将单行中两个数字的范围与同一行中的数字进行比较?

问题描述 投票:1回答:2

我有三列,一列是产品的最低价格,另一列是产品的最高价格,而产品的实际价格。我正在尝试逐行比较最低和最高价格与实际价格,以查看价格是否在该范围内。

以下是一些示例数据:

MinimumPrice    MaximumPrice    ActualPrice
30.5               41                51
95.5              100                92
45.5              50                 43
70                75                 80

我尝试使用:

TBAcomparison$withinRange_Price<- ifelse(sapply(Prices$ActualPrice, function(p) 
  any(Prices$MaximumPrice <= p & Prices$MinimumPrice>= p)),1, NA)

尽管,这不是我想要的。

结果应为:

MinimumPrice    MaximumPrice    ActualPrice      WithinRange
30.5               41                51             1
95.5              100                92             NA
42.5              50                 43             1
70                75                 80             NA

任何能够协助您的人,将不胜感激。

dput:

structure(list(MinimumPrice = c(30.5, 95.5, 45.5, 70), MaximumPrice = c(41, 
100, 50, 75), ActualPrice = c(51, 92, 43, 80), withinrange = c("No", 
"No", "No", "No")), row.names = c(NA, -4L), class = c("tbl_df", 
"tbl", "data.frame"))
r comparison
2个回答
1
投票

带有dplyr的选项

library(dplyr)
Prices %>%
   mutate(withinRange_Price = case_when(ActualPrice > MinimumPrice & 
             ActualPrice <= MaximumPrice ~ 1))

2
投票

<>已向量化,因此使用sapply会使您过于复杂。试试这个:

Prices$withinRange_Price <- with(Prices, ifelse(MinimumPrice <= AcutalPrice & ActualPrice <= MaximumPrice, 1, NA))

我有点困惑,您的代码似乎使用2个数据帧,但是您的文本和样本数据仅指示1个数据帧,但我将留给您。

© www.soinside.com 2019 - 2024. All rights reserved.