![](/img/trans.png)
[英]How do I check if each row in a column falls between a range of two other columns?
[英]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 論壇的時間沒有任何幫助......我被卡住了。
對於left
, right
參數, between
沒有向量化。 我們需要比較運算符
df$Within_Range <- with(df, +(Result > Min & Result < Max))
注意:如果范圍還應包括最小值、最大值,則更改為>=
或<=
此外,在第一段代碼中,由於多種原因, if/else
是不必要的
df$Result
和其他列的length
顯然大於 1)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.