2016-09-08 2 views
1

Ich habe eine Tabelle:bearbeiten Spalte unter der Bedingung

id <- c(1,1,2,2,2,2,2,3,3,4,4,5,5,5) 
    dist <- c(0,1,1,0,2,15,0,4,4,0,5,5,16,2) 
    data <- data.frame(id, dist) 

Ich mag würde die Spalte id bearbeiten, wenn dist auf einen bestimmten Wert überlegen ist (sagen wir mal 10). Ich bin auf der Suche +1 hinzuzufügen, wenn data$dist >10

Die endgültige Ausgabe sei:

data$id_new <- c(1,1,2,2,2,3,3,4,4,5,5,6,7,7) 

Ist es möglich, etwas mit einer if Schleife zu tun? Ich habe versucht, etwas mit einer Schleife, aber ich bin immer noch nicht erfolgreich.

+0

Daten $ id> 10 pr Daten $ dist verwenden> 10? Frage ist wirklich nicht klar. –

+0

Ich habe versucht, 'max (data $ id)' zu erhalten und 'max (data $ id) + 1' hinzuzufügen, wenn' data $ dist> 10' – Floni

+2

Können Sie die erwartete Ausgabe hinzufügen, wenn der erste Wert von dist 11 ist? – zx8754

Antwort

6

Vielleicht cumsum mit:

data$new_id <- data$id + cumsum(data$dist > 10) 

Erläuterung:

cumsum(data$dist > 10) wird die kumulative Summe der Indizes in data$dist zurück, die als 10. größer sind, können Sie sehen, wie diese auseinander, indem der Ausdruck funktioniert in R und sehen, wie jedes Stück funktioniert.

+0

@akrun Ich denke, sowohl mein als auch dein ist falsch. Stellen Sie sich vor, der 1. Wert von dist ist 11. – zx8754

+0

@ zx8754 In diesem Fall auch '1 1 2 2 2 3 3 4 4 5 5 6 7 7 'Ich verstehe nicht, was Sie meinten. Ich denke, es beginnt bei 1, oder? – akrun

+0

@akrun Ich denke, OP ist nicht klar mit der erwarteten Ausgabe. – zx8754

4

Wir duplicated mit >

with(data, cumsum(dist > 10| !duplicated(id))) 
#[1] 1 1 2 2 2 3 3 4 4 5 5 6 7 7 
+1

Warum 'dupliziert? – zx8754

+0

@ zx8754 Nur um die 'TRUE' zu erfassen, wenn jede neue ID passiert (vorausgesetzt, dass die Daten geordnet sind. Es sollte auch mit ungeordneten funktionieren, aber dann denke ich, dass das logische in der Frage auch geändert werden sollte). Wenn wir eine numerische Addition verwenden, könnte dies in einer kategorialen Variablen problematisch sein. – akrun

Verwandte Themen