mam wektor:R identyfikacji wiersz przed zmianą znaku
df <- c(5,9,-8,-7,-1)
Jak mogę zidentyfikować pozycję przed zmianą znaku? tj df[2]
mam wektor:R identyfikacji wiersz przed zmianą znaku
df <- c(5,9,-8,-7,-1)
Jak mogę zidentyfikować pozycję przed zmianą znaku? tj df[2]
Jest to dość proste, jeśli wiesz o funkcji sign
...
which(diff(sign(df))!=0)
# [1] 2
wolę odpowiedź Joshua, ale tutaj jest alternatywą, bardziej skomplikowany dla zabawy:
head(cumsum(rle(sign(df))$lengths),-1)
+1 za skomplikowaną zabawę! –
podobnie jak w powyższej odpowiedzi @JoshuaUlrich, ta odpowiedź uważa, że c (0,1) ma zmienić znak. To może lub nie być pożądane w zależności od aplikacji! – MHH
Jeśli chcesz być straszny człowiek, zawsze można użyć pętli for:
signchange <- function(x) {
index = 0
for(i in 1:length(x))
{
if(x[i] < 0)
{
return (index)
}
else
{
index = index + 1
}
}
return (index)
}
Nie byłem spadkobiercą, ale jeśli masz zamiar być okropną osobą i użyć pętli, powinieneś przynajmniej sprawdzić, czy pierwszy element jest pozytywny czy negatywny. Funkcja as is wykrywa pierwszą wartość ujemną - nie pierwszą zmianę znaku. – Dason
... a jeśli wiesz o funkcji 'diff' :) – Tommy
Dziękuję. To bardzo pomocne. –
Uważaj, ta odpowiedź uważa, że c (0,1) ma zmienić znak. To może lub nie być pożądane w zależności od aplikacji! – MHH