2017-01-23 1 views
0

Ich habe die Eingabe unten und ich möchte die zwei Spalten subtrahieren, aber ich möchte immer den niedrigsten Wert vom höchsten Wert subtrahieren. Weil ich keine negativen Werte als Ergebnis haben möchte und manchmal der höchste Wert in der ersten Spalte (PaternalOrgin) und anderen Zeiten in der zweiten Spalte (MaternalOrigin) ist.subtrahiere die größere Spalte von kleineren Spalten in einem Datenrahmen in R

Eingang:

df <- PaternalOrigin MaternalOrigin 
16    20 
3    6 
11    0 
1    3 
1    4 
3    11 

und die dput Ausgang ist dies:

df <- structure(list(PaternalOrigin = c(16, 3, 11, 1, 1, 3), MaternalOrigin = c(20, 6, 0, 3, 4, 11)), colnames = c("PaternalOrigin", "MaternalOrigin"), row.names= c(NA, -6L), class="data.frame") 

So meine erwartete Ausgabe aussehen würde:

df2 <- PaternalOrigin MaternalOrigin Results 
16    20  4 
3    6  3 
11    0  11 
1    3  2 
1    4  3 
3    11  8 

Bitte, kann mir jemand raten? Danke.

Antwort

0

Wir wickeln mit abs

transform(df, Results = abs(PaternalOrigin - MaternalOrigin)) 
#  PaternalOrigin MaternalOrigin Results 
#1    16    20  4 
#2    3    6  3 
#3    11    0  11 
#4    1    3  2 
#5    1    4  3 
#6    3    11  8 

Oder wir können es zuweisen 'Ergebnisse'

df$Results <- with(df, abs(PaternalOrigin - MaternalOrigin)) 

Oder mit data.table

library(data.table) 
setDT(df)[, Results := abs(PaternalOrigin - MaternalOrigin)] 

Oder mit dplyr

library(dplyr) 
df %>% 
    mutate(Results = abs(PaternalOrigin - MaternalOrigin)) 
+1

danke! Es hat mir wirklich geholfen! – Tfg1005

Verwandte Themen