Erstellen Sie eine Spalte mit aufsteigenden Werten basierend auf eindeutigen Werten in einer anderen Spalte in R, wobei neue Daten stapelweise hinzugefügt werden

Will Hamilton

Ich habe in Python eine ähnliche Frage gestellt ( Wie erstelle ich eine Spalte mit aufsteigenden Werten basierend auf eindeutigen Werten in einer anderen Spalte in Pandas ) und das Skript zum Laufen gebracht, aber aus verschiedenen Gründen muss ich jetzt in R dasselbe erreichen. Ich füge hier auch die Komplexität hinzu, wenn ich in der Lage sein möchte, dem Datensatz regelmäßig neue Datenstapel hinzuzufügen.

Ich habe eine Liste von Proben mit eindeutigen Proben-ID-Nummern ("Sample_ID"). Jede Zeile des Datensatzes ist ein Beispiel. Einige Beispiele werden mehrmals dupliziert. Ich möchte einen neuen Satz von Beispielnamen ("Sample_code") erstellen, der von 1 aufsteigt, wenn Sie mit einem Präfix (z. B. "SAMP00001", "SAMP00002" usw.) durch die Zeilen gehen. Ich möchte, dass die Reihenfolge der Zeilen beibehalten wird (da sie ungefähr in der Datumsreihenfolge der Probensammlung liegen). Und für doppelte Samples möchte ich, dass die für Sample_code angegebene Nummer der ersten Zeile entspricht, in der die Sample-ID angezeigt wird, und nicht den Zeilen weiter unten in der Tabelle (die später in der Samplesammlung angezeigt wurden).

Meine Startdaten sind mit df1 dargestellt:

# df1
Sample_ID <- c('123123','123456','123123','123789')
Date <- c('15/06/2019', '23/06/2019', '30/06/2019', '07/07/2019')
Variable <- c("blue","red","red","blue")
Batch <- 1
df1 <- data.frame(Sample_ID, Date, Variable, Batch)
df1

Ich möchte die in df1b gezeigte Spalte Sample_code erstellen:

# df1b
Sample_ID <- c('123123','123456','123123','123789')
Date <- c('15/06/2019', '23/06/2019', '30/06/2019', '07/07/2019')
Variable <- c("blue","red","red","blue")
Batch <- 1
Sample_code <- c('SAMP0001', 'SAMP0002', 'SAMP0001', 'SAMP0003')

df1b <- data.frame(Sample_ID, Date, Variable, Batch, Sample_code)
df1b

Ich würde an dieser Stelle df1b und die für die Weiterverarbeitung verwendeten Sample_code-Namen speichern. Die zusätzliche Komplexität entsteht, weil ich dann eine neue Charge von Samples sammeln werde - nennen wir es df2 (Batch 2 Samples):

# df2
Sample_ID <- c('456789', '123654', '123123', '123789', '121212')
Date <- c('15/07/2019', '31/07/2019', '12/08/2019', '27/08/2019', '31/08/2019')
Variable <- c("blue", "red","blue", "red", "red")
Batch <- 2

df2 <- data.frame(Sample_ID, Date, Variable, Batch)
df2

Ich möchte df2 an den unteren Rand von df1 binden und mehr Sample_code-Namen für die neuen Zeilen generieren. Wichtig ist, dass die neuen Sample_code-Namen alle in df1 vorhandenen Sample_ID-Duplikate berücksichtigen müssen, aber auch keinen der Sample_code-Namen ändern müssen, die bereits zugewiesen wurden, als ich nur df1 hatte. Das Ergebnis an dieser Stelle wäre unten df2b:

# df2b
Sample_ID <- c('123123','123456','123123','123789','456789', '123654', '123123', '123789', '121212')
Date <- c('15/06/2019', '23/06/2019', '30/06/2019', '07/07/2019', '15/07/2019', '31/07/2019', '12/08/2019', '27/08/2019', '31/08/2019')
Variable <- c("blue","red","red","blue","blue", "red","blue", "red", "red")
Batch <- c(1,1,1,1,2,2,2,2,2)
Sample_code <- c('SAMP0001', 'SAMP0002', 'SAMP0001', 'SAMP0003', 'SAMP0004', 'SAMP0005', 'SAMP0001', 'SAMP0003', 'SAMP0006')
df2b <- data.frame(Sample_ID, Date, Variable, Batch, Sample_code)
df2b

Und dann würde ich Batch 3 Samples auf die gleiche Weise hinzufügen usw. usw.

Ich schätze, dass dieses Problem mindestens zwei Stufen umfasst: 1) Erstellen einer aufsteigenden Liste von Sample_code-Namen unter Verwendung eindeutiger Sample_ID-Werte; und 2) iteratives Erstellen von Probenstapeln. Da sich der zweite Punkt jedoch auf die Funktionalität auswirkt, die ich für die Sample_code-Namen möchte, habe ich hier beide Stufen aufgenommen.

Schließlich - idealerweise möchte ich dafür nur Basis-R- und Tidyverse-Pakete verwenden.

Jede Hilfe sehr geschätzt! Vielen Dank.

Perfekt

Da Sie vor der Zuweisung des Beispielcodes alle möglichen Beispiel-IDs kennen müssen, sollten Sie die Reihenfolge umkehren, indem Sie rbindalle Beispieldatenrahmen aufrufen . Weisen Sie dann den Sample_code mithilfe von factorEbenen zu. Andernfalls weisen Sie Sample_code jedem Batch - Datenrahmen neu zu.

# BUILD A LIST OF DATA FRAMES BY CALLING lapply ON ITERATIVE PROCESS 
# df_list <- lapply(batch_iterable, method_to_build_sample)
df_list <- list(df1, df1b, df2)       # FOR THIS PARTICULAR POST

# RBIND ALL DFs TOGETHER
df2b <- do.call(rbind, df_list)

df2b <- within(df2b, {
    # CONVERT TO CHARACTER
    Sample_ID <- as.character(Sample_ID)

    # CONVERT TO FACTOR AT POSITIONED VALUES, THEN INTEGER FOR LEVEL NUMBER
    Sample_code <- as.character(as.integer(factor(Sample_ID, levels = unique(Sample_ID))))

    # RE-ASSIGN WITH SAMP AND LEADING ZEROS 
    Sample_code <- ifelse(nchar(Sample_code) == 1, paste0('SAMP000', Sample_code),
                          ifelse(nchar(Sample_code) == 2, paste0('SAMP00', Sample_code),
                                ifelse(nchar(Sample_code) == 3, paste0('SAMP0', Sample_code), NA)
                         )
                   )
})

df2b
#   Sample_ID       Date Variable Batch Sample_code
# 1    123123 15/06/2019     blue     1    SAMP0001
# 2    123456 23/06/2019      red     1    SAMP0002
# 3    123123 30/06/2019      red     1    SAMP0001
# 4    123789 07/07/2019     blue     1    SAMP0003
# 5    456789 15/07/2019     blue     2    SAMP0004
# 6    123654 31/07/2019      red     2    SAMP0005
# 7    123123 12/08/2019     blue     2    SAMP0001
# 8    123789 27/08/2019      red     2    SAMP0003
# 9    121212 31/08/2019      red     2    SAMP0006

Dieser Artikel stammt aus dem Internet. Bitte geben Sie beim Nachdruck die Quelle an.

Bei Verstößen wenden Sie sich bitte [email protected] Löschen.

bearbeiten am
0

Lass mich ein paar Worte sagen

0Kommentare
LoginNach der Teilnahme an der Überprüfung

Verwandte Artikel

TOP Liste

  1. 1

    So legen Sie mit dem Interface Builder unterschiedliche führende Speicherplätze für unterschiedliche Geräte fest

  2. 2

    Fügen Sie eine weitere Schaltfläche zu gwt Suggest Box hinzu

  3. 3

    Wie konvertiere ich einen Vektor von Bytes (u8) in eine Zeichenfolge?

  4. 4

    Wie kann ich in SCSS mehrere Klassen zu einer einzigen kombinieren?

  5. 5

    Wie konvertiert man einen Datenrahmen im langen Format in eine Liste mit einem geeigneten Format?

  6. 6

    Speichern Sie ein MPAndroidChart-Diagramm in einem Bild, ohne es in einer Aktivität anzuzeigen

  7. 7

    Gruppieren Sie Datenrahmenspalten nach ihrem Datum (die Spaltentitel enthalten) und fassen Sie die Instanzen von Einsen und Nullen in R . zusammen

  8. 8

    Tomcat - Leiten Sie den alten Kontextstamm zum neuen Kontextstamm um

  9. 9

    Eclipse Oxygen - Projekte verschwinden

  10. 10

    Wie wählt man Unterschiede mit drei Tabellen aus?

  11. 11

    Tic Tac Toe-Spiel im React-Reset-Button funktioniert nicht

  12. 12

    So berechnen Sie die Verfügbarkeit von Anwendungen (SLA)

  13. 13

    ElasticSearch BulkShardRequest ist aufgrund von org.elasticsearch.common.util.concurrent.EsThreadPoolExecutor fehlgeschlagen

  14. 14

    Wie kann ich den Kaskadenmodus global einstellen?

  15. 15

    Python: Spalten mit demselben Namen zusammenführen, wobei der Mindestwert beibehalten wird

  16. 16

    So erhalten Sie eine gleichmäßige Höhe für alle Eingabefelder

  17. 17

    Wie erstelle ich einen neuen übergeordneten Knoten außerhalb der .ref (/ path) in der Firebase-Echtzeitdatenbank mithilfe von Cloud-Funktionen (Typescript)?

  18. 18

    Was ist schneller: SUM über NULL oder über 0?

  19. 19

    Wie kann ich eine verschachtelte Schleife mit lapply in R ersetzen?

  20. 20

    Kann ich ein Tkinter-Canvas erstellen, das mehrere Zeilen in einem Text-Widget umfasst?

  21. 21

    Ärgerliches Problem mit yaml, das ich nicht lösen kann

heißlabel

Archiv