Ich habe zwei Spalten ID
und Trial
. Die ID-Spalte ist mit NA s gefüllt. Die Spalte Trial
beginnt bei 0 und endet mit einer arbritären Nummer (z. B. 1232), woraufhin die nächsten Testsequenzen mit 0 usw. beginnen. Mein Ziel ist es, eine eindeutige ID für jede Versuchsreihe zu erstellen.Wie kann ich eine data.table-Spalte durch eine Sequenz ersetzen, die von einer anderen Spalte abhängt?
Ich bin neu in R und erkennen, dass es mehrere Möglichkeiten, dieses Problem zu lösen:
- Verwendung von zwei verschachtelten Schleifen
- Mit
lapply
zusammen mit einem abstrakten Funktionsaufruf oder (oderrapply
?) (?) Griff - mit
nextElem
vomiterator
Paket zusammen mit Punkt 1 oder 2 - zuerst die Liste zu erzeugen und den Ersatz die Werte in einem zweiten Schritt, zum Beispiel mit zwei
seq()
basierend auf irgendeiner Art von Iteration auf Untergruppen:ex_data[subset]
Bisher habe ich die Zahl der Teilnehmer heraus ist:
N <- dim(filter(ex_data, Trial == 0))[1]
Oder elegante:
N <- count(ex_data[Trial == 0])
Insbesondere ist es der bedingte Teil, mit dem ich kämpfe und was die am meisten R-ähnliche Lösung wäre.
Pseudocode:
IDs are 1:N
while IDs < N+1
current + 1
while column Trial is > 0
ID is IDs[current]
next Trial
next Trial
Wie kann ich die Entscheidung, wenn Schleifen über wie die apply
Familie kompakten Ausdrücke zu benutzen? Wie erzeuge ich eine neue Sequenz basierend auf einer fast zyklischen Spalte?
Example Data (for generation see below)
id t
[1,] NA 0
[2,] NA 1
[3,] NA 2
[4,] NA 3
[5,] NA 4
[6,] NA 5
[7,] NA 0
[8,] NA 1
[9,] NA 2
[10,] NA 3
[11,] NA 4
[12,] NA 5
[13,] NA 6
[14,] NA 7
[15,] NA 0
[16,] NA 1
[17,] NA 2
[18,] NA 3
[19,] NA 4
[20,] NA 5
[21,] NA 6
[22,] NA 7
[23,] NA 8
[24,] NA 9
[25,] NA 10
[26,] NA 11
[27,] NA 12
# Generate Example Data
t <- c(0:5, 0:7, 0:12)
id <- rep(NA, length(t))
dta <- cbind(id, t)
# Optional (using dtplyr)
# dta <- tbl_df(dta)
ein Beispieldaten hinzuzufügen, so dass eine neue Serie von '0' rechts angezeigt wird? –
Bitte geben Sie ein kleines reproduzierbares Beispiel und die erwartete Ausgabe an – akrun
'ex_data $ ID <- cumsum (ex_data $ Trial == 0)' würde funktionieren, außer Ihre Daten bedeuteten etwas anderes –