rle-ähnliche Funktion, die "run" von benachbarten Ganzzahlen abfängt

8

Ich bin mir ziemlich sicher, dass Sie alle zustimmen, dass rle eine dieser "Gotcha" -Funktionen in R ist. Gibt es eine ähnliche Funktion, die einen "Lauf" von benachbarten ganzzahligen Werten "fangen" kann?

Also, wenn ich einen Vektor wie diesen habe:

%Vor%

und ich nenne diese esoterische Funktion, ich werde eine Antwort wie diese erhalten:

%Vor%

Es ist nicht schwer so eine Funktion zu schreiben, aber trotzdem ... irgendwelche Ideen?

    
aL3xa 11.12.2011, 19:32
quelle

4 Antworten

8

1) Berechne Werte und dann Längen basierend auf Werten

%Vor%

Das Ausführen von x aus der Frage ergibt Folgendes:

%Vor%

2) Berechnen Sie Längen und dann Werte basierend auf den Längen

Hier ist eine zweite Lösung basierend auf Gregors Längenberechnung :

%Vor%

3) Berechnen Sie Längen und Werte, ohne andere zu verwenden

Dieser scheint ineffizient zu sein, da er jedes von lengths und values von Grund auf neu berechnet und es scheint auch etwas übermäßig komplex zu sein, aber es schafft es, alles auf eine einzige Aussage zu reduzieren, also dachte ich, ich würde es auch hinzufügen . Es ist im Grunde genommen nur eine Mischung der beiden vorherigen Lösungen, die oben mit 1) und 2) gekennzeichnet sind. Nichts wirklich neues im Verhältnis zu diesen beiden.

%Vor%

BEARBEITEN: Zweite Lösung hinzugefügt.

BEARBEITEN: Dritte Lösung hinzugefügt.

    
G. Grothendieck 11.12.2011, 21:04
quelle
6

Wie wäre es mit

? %Vor%

Die Längen sind, was Sie wollen, obwohl ich auf eine ebenso schlaue Art und Weise blende, um die richtigen Werte zu erhalten, aber mit cumsum() und der ursprünglichen x sind sie sehr zugänglich.

    
Gregor 11.12.2011 21:47
quelle
5

Wie Sie sagen, ist es einfach genug, etwas ähnliches wie rle zu schreiben. In der Tat könnte die Anpassung des Codes für rle durch Hinzufügen von + 1 etwas wie

ergeben %Vor%

und verwenden Sie Ihr Beispiel

%Vor%

was John erwartet hat.

Sie könnten den Code weiter anpassen, um die erste von jeder aufeinanderfolgenden Teilfolge anstatt der letzten zu geben.

    
Henry 11.12.2011 20:07
quelle
2

Ich habe kürzlich meinen seqle code hier gepostet, basierend auf Code, der hier schon vorher gepostet wurde :-).

Sie finden es unter erkennen Intervalle der folgenden Integer-Sequenzen

    
Carl Witthoft 11.12.2011 21:32
quelle

Tags und Links