Ich habe eine dataframe
und ich möchte eine Funktion anwenden, die die Werte von drei Spalten und berechnet die minimale Differenz zwischen den drei Werten.Verwenden Sie mehrere Spalten als Variablen mit Sapply
#dataset
df <- data.frame(a= sample(1:100, 10),b = sample(1:100, 10),c= sample(1:100, 10))
#function
minimum_distance <- function(a,b,c)
{
dist1 <- abs(a-b)
dist2 <- abs(a-c)
dist3 <- abs(b-c)
return(min(dist1,dist2,dist3))
}
Ich suche so etwas wie:
df$distance <- sapply(df, function(x) minimum_distance(x$a,x$b,x$c))
## errormessage
Error in x$a : $ operator is invalid for atomic vectors
Während ich ddply verwenden:
df2 <- ddply(df,.(a),function(r) {data.frame(min_distance=minimum_distance(r$a,r$b, r$c))}, .drop=FALSE)
Dies nicht alle Spalten nicht halten. Irgendwelche Vorschläge?
Edit: Ich landete mit:
df$distance <- mapply(minimum_distance, df$a, df$b, df$c)
einfach und elegant. danke – zach
Welche ine ist die schnellste? oder effizienter? – Bharath