Tôi có một dataframe
và tôi muốn áp dụng hàm có giá trị của ba cột và tính toán sự khác biệt tối thiểu giữa ba giá trị.sử dụng nhiều cột dưới dạng biến với 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))
}
Tôi đang tìm kiếm một cái gì đó như:
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
Trong khi tôi có thể sử dụng ddply:
df2 <- ddply(df,.(a),function(r) {data.frame(min_distance=minimum_distance(r$a,r$b, r$c))}, .drop=FALSE)
này không giữ tất cả các cột. Bất kỳ đề xuất?
Edit: tôi đã kết thúc bằng:
df$distance <- mapply(minimum_distance, df$a, df$b, df$c)
đơn giản và thanh lịch. thanks – zach
Ine nào là nhanh nhất? hoặc hiệu quả hơn? – Bharath