2016-10-06 1 views
-1

Ich möchte zwei Variablen in einer Zeichenfolge zusammenfassen. Lassen Sie uns sagen, das ist meine IDFassen Sie mehrere Variablen zu Zeichenketten in dplyr zusammen.

#visit 

id source1 source2 
1 a   t 
2 c   l 
3 c   z 
1 b   x 

zweiten Datensatz:

#transaction 
id transactions 

1  1 
3  2 
1  2 

Ich möchte diese Daten miteinander verbinden, sondern sie zu String gleichzeitig konvertieren:

Ich kann tun eine Variable (wir Quelle 1 sagen):

library(dplyr) 
%>% left_join(visit, transaction, by="id") 
%>% group_by(id) 
%>% summarise(Source = toString(unique(source1)), transactions = toString(unique(transactions))) 

das gibt mir die folgende Ausgabe:

id  source  transactions 
1  a,b   1,2 
2  c   NA 
3  c   2 

Aber ich möchte für zwei Variablen zusammenfassen: Also mein Wunsch Ausgabe etwas wie das sein würde:

id  source  transactions 
1  a,t > b,x 1,2 
2  c,l   NA 
3  c,z   2 
+0

'visit%>% left_join (Transaktion)%>% group_by (id)%>% summarisieren (source = einfügen (toString (unique (source1)), '>', toString (unique (source2))), transaction = toString (einmalig (Transaktionen)))? – alistaire

+0

Vielen Dank @alistair. Es scheint wahr zu sein. Ich bin froh, Ihre Antwort zu akzeptieren, wenn Sie es unten veröffentlichen. – MFR

Antwort

1

Sie können die beiden Variablen zusammen paste, sowohl sep und collapse mit kombinieren:

visit %>% left_join(transaction) %>% 
    group_by(id) %>% 
    summarise(source = paste(unique(source1), unique(source2), sep = ', ', collapse = ' > '), 
       transaction = na_if(toString(unique(na.omit(transactions))), '')) 

## # A tibble: 3 × 3 
##  id  source transaction 
## <int>  <chr>  <chr> 
## 1  1 a, t > b, x  1, 2 
## 2  2  c, l  <NA> 
## 3  3  c, z   2 

Vorsicht, obwohl; paste und toString blöd zwingt NA s zu Zeichenketten. Möglicherweise möchten Sie sich in na.omit einwickeln oder na_if verwenden.

+0

Danke @alistair. Es funktioniert irgendwie für mich. Haben Sie eine Idee, wie wir die Kombinationen von zwei Quellen haben können? Ich meine statt a, b> t, x können wir a, t> b, x haben? – MFR

+0

'visit%>% left_join (Transaktion)%>% group_by (id)%>% summarisieren (source = einfügen (apply (data.frame (s1 = eindeutig (source1), s2 = eindeutig (source2)), 1, toString), collapse = '>', transaction = toString (unique (transactions))) '? Sie müssen wirklich zeigen, wie die anderen Zeilen aussehen sollen. – alistaire

Verwandte Themen