Häufigkeit zählt in R

Dies mag wie eine sehr grundlegende Frage erscheinen, aber ich würde eine Antwort zu schätzen wissen. Ich habe einen Datenrahmen in Form von:

col1 col2 ag ah ag bi bg bh ci 

Ich möchte es in Zählimpulse umwandeln, also würde das Ergebnis so sein. Ich habe versucht, mit der function table (), aber nur in der Lage sein, die Anzahl für eine Spalte zu erhalten.

  abc g 2 1 0 h 1 1 0 i 0 1 1 

Wie mache ich das in R?

    Ich bin mir nicht sicher, was du benutzt hast, aber table funktioniert gut für mich!

    Hier ist ein minimales reproduzierbares Beispiel:

     df < - structure(list(V1 = c("a", "a", "a", "b", "b", "b", "c"), V2 = c("g", "h", "g", "i", "g", "h", "i")), .Names = c("V1", "V2"), class = "data.frame", row.names = c(NA, -7L)) table(df) # V2 # V1 ghi # a 2 1 0 # b 1 1 1 # c 0 0 1 

    Anmerkungen:

    • Probieren Sie table(df[c(2, 1)]) (oder table(df$V2, df$V1) ) aus, um die Zeilen und Spalten zu vertauschen.
    • Verwenden Sie as.data.frame.matrix(table(df)) , um ein data.frame als Ausgabe zu erhalten. ( as.data.frame erstellt einen langen data.frame , nicht einen in dem von Ihnen gewünschten Ausgabeformat).

    Mit f von @Ananda kannst du dcast

     library(reshape2) > dcast(f, V1~V2) Using V2 as value column: use value.var to override. Aggregation function missing: defaulting to length V1 ghi 1 a 2 1 0 2 b 1 1 1 3 c 0 0 1 

    Ich schreibe dies jedoch nur für den Fall, dass Sie in Zukunft etwas mehr als nur table brauchen (was in diesem Fall die einfachste richtige Antwort ist), wie:

     set.seed(1) f$var < - rnorm(7) > f V1 V2 var 1 ag -0.6264538 2 ah 0.1836433 3 ag -0.8356286 4 bi 1.5952808 5 bg 0.3295078 6 bh -0.8204684 7 ci 0.4874291 > dcast(f, V1~V2, value.var="var", fun.aggregate=sum) V1 ghi 1 a -1.4620824 0.1836433 0.0000000 2 b 0.3295078 -0.8204684 1.5952808 3 c 0.0000000 0.0000000 0.4874291