Ich habe zwei Datenrahmen:
Node1<-c(1, 2, 3, 4, 5, 6, 7)
Node1<-c(1, 1, 1, 2, 2, 3)
Node2<-c(2, 3, 4, 3, 4, 4)
Mean<-c(2, 1, 5, 3, 2, 3)
SD<-c(0.1, 0.2, 0.01, 0.2, 0.01, 0.01)
df1<-data.frame(Node1, Node2, Mean, SD)
df1
Node1 Node2 Mean SD
1 1 2 2 0.10
2 1 3 1 0.20
3 1 4 5 0.01
4 2 3 3 0.20
5 2 4 2 0.01
6 3 4 3 0.01
df2<-data.frame(Node1, Node2, value)
df2
Node1 Node2 value
1 1 2 1
2 1 3 2
3 1 4 1
4 2 3 4
5 2 4 6
6 3 4 7
Für jede "Wert"-Zeile in df2 möchte ich den Z-Score berechnen, indem ich den Mittelwert und die Standardabweichung (SD) aus dem entsprechenden Knotenpaar (dh Knoten1 und Knoten2) von df1 als Referenzwerte verwende. Beispielsweise sollte für die erste Zeile von df2 der z-Score ((1-2)/0,10) sein, da der entsprechende Mittelwert und die Standardabweichung durch Abgleichen der Werte von Node1 und Node2 aus beiden dfs abgeleitet werden.
Wie mache ich das in R? Meine aktuellen Lösungen verwenden left_join
, um df1 und df2 zu kombinieren, verwenden dann mutate
und case_when
, aber ich kann nicht darüber hinausgehen, um die Z-Scores zu extrahieren, während bestimmte Bedingungen beibehalten werden (dh tun, während die Werte von Node1 und Node2 aus beiden dfs übereinstimmen).
Lösung des Problems
Ich denke, Sie können einfach tun:
left_join(df1, df2, by = c('Node1', 'Node2')) %>%
mutate(z_score = (Mean - value) / SD)
#> Node1 Node2 Mean SD value z_score
#> 1 1 2 2 0.10 1 10
#> 2 1 3 1 0.20 2 -5
#> 3 1 4 5 0.01 1 400
#> 4 2 3 3 0.20 4 -5
#> 5 2 4 2 0.01 6 -400
#> 6 3 4 3 0.01 7 -400
Keine Kommentare:
Kommentar veröffentlichen