2016-11-11 2 views
0

Ich möchte auf meine verkettete Zeichenfolge mit einigen Bedingungen zu mitteln. dies ist meine Daten:Durchschnitt auf verketteten String mit einigen Bedingungen

id path events 

1 a, b 2, 3 
2 c, a 3, 4 
3 b  5 

Ich möchte durchschnittlich Reihen nehmen, die nicht haben einen bestimmten Weg, beispielsweise den Mittelwert der Zeilen, die nicht c hat (dh Zeile 1 und 3) zu tun ist (2 + 3 + 5)/3 = 3,33

und ähnlich für die anderen so meine gewünschte Ausgabe

path avg 
a  5 
b  3.5 
c  3.33 

vor, daß ich nicht verketteten Daten versucht wird und es funktionierte

output <- sapply(as.character(unique(df$path)), 
       function(x) mean(subset(df, !path %in% x)$events)) 

konnte aber nicht mit einer Idee für diese Situation kommen

Dies ist meine Daten

mydata <- data.frame(id =c(1,2,3), 
        path= c("a,b", "c,a", "b"), 
        events =c (("2,3"), ("3,4"), ("5"))) 
+0

Sie können 'tidyr :: separate_rows' verwenden, um Ihre Daten zu vereinheitlichen, aber ich bin mir nicht sicher, ob ich Ihrer Zusammenfassungslogik folge. – alistaire

+0

@alistaire Dankeschön (meine obige Sommerisierungslogik, zum Beispiel für c, wir legen die Zeilen mit c beiseite, also entfernen wir Zeile 2 (die c hat) und behalten Zeile 1 und 3 und nehmen Durchschnitt von alle Ereignisse in Zeile 1 und 3, die 2 + 3 + 5/3 = 3.33 ist – MFR

Antwort

3

hier ein tidyverse Ansatz:

library(tidyverse) 

mydata %>% separate_rows(path, events, convert = TRUE) %>% # unnest rows 
    group_by(path) %>% # set grouping 
    summarise(avg = mean(.$events[!.$id %in% id])) # summarize groups 

## # A tibble: 3 × 2 
## path  avg 
## <chr> <dbl> 
## 1  a 5.000000 
## 2  b 3.500000 
## 3  c 3.333333 

Notiere die Verdichtungs .$[column name] verwendet beziehen auf die gesamte Spalte und nur [column name], um auf die Werte für die Gruppe zu verweisen.

+0

Das ist seltsam, gibt es Ihnen eine Fehlermeldung? Sie könnten tatsächlich 'Bibliothek (tidyr); Bibliothek (dplyr)' direkt, wenn du magst das; das sind die einzigen beiden, die es verwendet. – alistaire

+0

Wenn deine Pfad- und Ereignisnummer in der Zeile nicht identisch sind, musst du die @alistaire-Lösung modifizieren und anstelle von 'separate_rows (events, convert = TRUE)' 'seperate_rows (path , convert = TRUE)%>% seperate_rows (events, convert = TRUE) ' – kwicher

+0

@alistaire es ist komisch, endlich habe ich das Paket erfolgreich installiert, aber dein Code gibt mir diesen Fehler Fehler im Rang (x, ties.method =" first " , na.last = "keep"): Argument "x" fehlt, wi th kein Standardwert – MFR

Verwandte Themen