簡體   English   中英

如何測試一列值中的每個元素是否介於其他兩列中的值之間?

[英]How to test whether each element in a column of values falls between values in two other columns?

這可能是問這個問題的一種非常復雜的方式。 我有一列“結果”,我想根據以前結果的統計數據進行測試,即計算的最小值和最大值。 如果結果列中的值介於相應的最小值和最大值之間,我想在名為 Within_range 的第四列中將其分配為“1”,如果不是,則將其分配為“0”。 我曾嘗試使用關系運算符 (<,>)

df$Within_Range <- if(df$Result > df$Min & df$Result < df$Max){"1"} else {"0"}

得到這個:在 if (df$Result > df$Min & df$Result < df$Max) { :條件長度 > 1 並且只使用第一個元素

R 似乎不喜歡我嘗試使用多個條件,所以我嘗試使用 between()

df$Within_Range <- if(between(df$Result,df$Min,df$Max)){"1"} else {"0"}

我得到了這個:錯誤:期望一個值:[extent=20511]。

下面是一些示例代碼:

Result <- 1:5
Min <- c(2,1,2,3,4)
Max <- c(3,4,5,8,7)
df <- data.frame(Result, Min, Max)

如果這是一個愚蠢的問題,請道歉; 我還是 R 的新手,搜索 R 論壇的時間沒有任何幫助......我被卡住了。

對於leftright參數, between沒有向量化。 我們需要比較運算符

df$Within_Range <- with(df, +(Result > Min & Result < Max))

注意:如果范圍還應包括最小值、最大值,則更改為>=<=


此外,在第一段代碼中,由於多種原因, if/else是不必要的

  1. 它不是矢量化的,即它期望輸入長度為 1 並輸出長度為 1 的邏輯向量( df$Result和其他列的length顯然大於 1)
  2. 比較運算符的 TRUE/FALSE 輸出存儲為1/0值。 所以,我們只需要用as.integer+將它強制轉換為二進制
df %>% mutate(Within_Range = between(Result, Min, Max))

## OutPut
  Result Min Max Within_Range
1      1   2   3        FALSE
2      2   1   4         TRUE
3      3   2   5         TRUE
4      4   3   8         TRUE
5      5   4   7         TRUE

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM