Problem:
感謝R友-Mimi 提供此問題.
Analysis:
本問題是如何找出同時滿足數值大於或等於0.5, 較辛苦的方法是將所有條件用 AND 運算(&)找出其結果. 實務上可考慮邏輯運算特性, 即 TRUE 表示1, FALSE 表示0, 利用 sum( )函數計算加總為12表示該列所有行滿足條件. 因為是每列都要判斷, 因此採用 apply, 第2個參數設定為1表示列運算. 最後以 which 回傳符合條件之指標.
# R code
# 建立矩陣範例 318*12
set.seed(123)
m <- matrix(round(c(runif(318*7), rep(1, 318*5)), 2), ncol=12)
rownames(m) <- paste0("row", 1:318)
head(m)
# 條件篩選
m.check <- (m >= 0.5)
head(m.check)
# 如果整列加總=12,表示所該列所有資料行皆符合篩選條件
ind <- which(apply(m.check, 1, sum) == 12)
ind
m[ind, ]
# end
這個例子實在受用!老師太厲害了!!!
回覆刪除如果是用在shiny套件上,可以讓使用者自行勾選1~12欄位,
只要選的欄位符合條件即可,不需要每一欄位都符合的話,
此時的邏輯要怎麼變化呢?
(現在頭腦裡的邏輯還是卡在每選一個欄位,就需要多一個&的想法,沒有靈活運用到邏輯思維>"< alan9956)
Hi friend,
刪除步驟1 先使用 checkboxGroupInput() 依照欄位名稱建立複選題
步驟2 依上述選取結果使用 which() 篩選結果, 有問題歡迎再討論.