2017-05-08 4 views
2

Ich habe ein Beispieldatenrahmen wie diese enter image description here Ich versuche, die Kreuzung zwischen den zwei Säulen coauthors und nacoauthors mit dem folgenden Codedplyr mutieren schneiden funktioniert nicht

interscout = 
    sample_test %>% 
    mutate(commonauth = intersect(coauthors, nacoauthors)) 

und ich diese Ausgabe erhalten zu finden enter image description here Ich bin mir nicht sicher, warum ich nicht in der Lage bin, den gemeinsamen Schnittpunkt mit intersect in mutate zu erhalten.

Idealerweise sollte die letzte Zeile leer sein und die zweite Zeile sollte nur JAMES M ANDERSON am Schnittpunkt haben.

Hier ist der Code für die Struktur.

> dput(sample_test) 
structure(list(fname = c("JACK", "JACK", "JACK"), lname = c("SMITH", 
"SMITH", "SMITH"), cname = c("JACK SMITH", "JACK A SMITH", "JACK B SMITH" 
), coauthors = list(c("AMEY S BAILEY", "JAMES M ANDERSON"), "JAMES M ANDERSON", 
    "JOHN MURRAY"), nacoauthors = list(c("AMEY S BAILEY", "JAMES M ANDERSON" 
), c("AMEY S BAILEY", "JAMES M ANDERSON"), c("AMEY S BAILEY", 
"JAMES M ANDERSON"))), row.names = c(NA, -3L), vars = list(fname, 
    lname), drop = TRUE, indices = list(0:2), group_sizes = 3L, biggest_group_size = 3L, labels = structure(list(
    fname = "JACK", lname = "SMITH"), class = "data.frame", row.names = c(NA, 
-1L), vars = list(fname, lname), drop = TRUE, .Names = c("fname", 
"lname")), class = c("grouped_df", "tbl_df", "tbl", "data.frame" 
), .Names = c("fname", "lname", "cname", "coauthors", "nacoauthors" 
)) 
+0

es geht um einen Fehler werfen weil mutate nach etwas ähnlichem Ausgabelänge für den vollständigen Datensatz sucht. Sie könnten sich außerhalb von dply 'intersect verwenden (sample_test $ coauthors, sample_test $ nacoauthors)' und es sollte funktionieren –

Antwort

2

Wenn Sie rowwise() hinzufügen und Ihre mutiert Spalte machen ein list es funktionieren:

interscout <- sample_test %>% 
    ungroup() %>% 
    rowwise() %>% 
    mutate(commonauth = list(intersect(coauthors, nacoauthors))) 

FWIW Wenn ich nicht rowwise() füge ich bekommen Error: not compatible with STRSXP

+0

Danke! Was ist die Rolle von Ungroup und Reihenweise hier? – Dinesh

+0

'ungroup()' ist möglicherweise nicht notwendig, aber es ist eine Vorsichtsmaßnahme, da Ihr 'dput' ein" groupped_df "beschreibt. Wenn eine Gruppierung für Ihren "Datenrahmen" wirksam wäre, würde "mutate()" in diesem Gruppierungsframework funktionieren, anstatt jede Zeile einzeln zu vergleichen, und das ist wahrscheinlich nicht das, was Sie hier wollen. Das 'rowwise()' sagt 'mutate()', jede Zeile für sich zu betrachten, was man in Reihenvergleiche machen möchte. – Nate

Verwandte Themen