Re: [問題] 找出向量的轉折處回傳index

看板R_Language作者 (天)時間10年前 (2015/10/15 10:17), 10年前編輯推噓1(100)
留言1則, 1人參與, 最新討論串2/2 (看更多)
※ 引述《sinclairJ (SunnyGymBoy)》之銘言: : 問題:找出向量的三個轉折處然後回傳此三個index及該值 : 問題說明:如果今有一向量 : v=c(1,2,3,4,5,6,7,6,5,4,3,2,1,2,3,4,5,6,7,6,5) : * * * : 我希望能回傳index=7,13,19 value=7,1,7 : 目前想到的解決方法就是用後面的數字減前面的數字 然後看哪個index出現負值 : 但這個方法好像只能偵測一向量1index : 對於要找出一向量3index 還沒想到該怎麼做 : 有勞各位前輩指導解惑 感謝~ 其實想到diff跟出現小於0已經快得到答案了XD 最後就是比看看跟前面是不是一樣是負的 v=c(1,2,3,4,5,6,7,6,5,4,3,2,1,2,3,4,5,6,7,6,5) tmp = diff(v) < 0 (index = which(tmp[-1L] != tmp[-length(tmp)]) + 1) # 7 13 19 # 不加1就是轉折前的點 (value = v[index]) # 7 1 7 PS: (a = 5) 等於是 a = 5;print(a) PS2: 這從rle延伸出來的想法,多看看source code有助身心健康!? use pipe operator to do this: library(magrittr) index = v %>% diff %>% is_less_than(0) %>% { .[-1L] != .[-length(.)] } %>% which %>% add(1) value = v[index] update: index = which(diff(diff(v)) != 0 ) + 1 value = v[index] -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.109.73.190 ※ 文章網址: https://www.ptt.cc/bbs/R_Language/M.1444875424.A.8E3.html

10/15 10:31, , 1F
原來還有diff這個函數阿~看來要多多觀摩code 感謝大大~
10/15 10:31, 1F
※ 編輯: celestialgod (140.109.73.190), 10/15/2015 14:22:50
文章代碼(AID): #1M7moWZZ (R_Language)
文章代碼(AID): #1M7moWZZ (R_Language)