作者celestialgod (天)
看板R_Language
标题Re: [问题] 找出向量的转折处回传index
时间Thu Oct 15 10:17:01 2015
※ 引述《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://webptt.com/cn.aspx?n=bbs/R_Language/M.1444875424.A.8E3.html
1F:推 sinclairJ: 原来还有diff这个函数阿~看来要多多观摩code 感谢大大~ 10/15 10:31
※ 编辑: celestialgod (140.109.73.190), 10/15/2015 14:22:50