2015-10-05 152 views
3

如何計算通過一些處理分組的觀測值之間的距離矩陣。數據dplyr中的歐幾里得距離R

例子:

set.seed(1212) 
df <- data.frame(yta = c(rep("A", 3), rep("B", 3)), x = rnorm(6, 10, 2), y = rnorm(6, 40, 12)) 

我想要得到的輸出使用splitlapplybind_rows這樣

  1   2   3   4   5   6 
1   4.234690 25.858459   0   0   0 
2 4.234690   23.503327   0   0   0 
3 25.858459 23.503327     0   0   0 
4   0   0   0   9.330203 9.277692 
5   0   0   0 9.330203   18.371015 
6   0   0   0 9.277692 18.371015  
+2

你確定輸出是正確的嗎? – zx8754

+0

這是錯誤的。現在的值是計算出來的,不管「yta」如何,我手動插入0。這些數字在正確的輸出中會有所不同,因爲距離將被計算爲'yta' wise – Mateusz1981

+0

提供代碼如何創建輸出 – zx8754

回答

2

事我們可以得到這樣的事情:

df %>% split(., (.)$yta) %>% lapply(function(df_part) df_part %>% select(-yta) %>% as.matrix %>% 
             dist(upper = T) %>% as.matrix %>% as.data.frame) %>% 
    bind_rows %>% mutate(yta = df$yta) 

# Source: local data frame [6 x 7] 
# 
#   1  2   3  4   5   6 yta 
# 1 0.000000 28.43909 4.350409  NA  NA  NA A 
# 2 28.439090 0.00000 32.038712  NA  NA  NA A 
# 3 4.350409 32.03871 0.000000  NA  NA  NA A 
# 4  NA  NA  NA 0.00000 20.267301 29.106135 B 
# 5  NA  NA  NA 20.26730 0.000000 9.116934 B 
# 6  NA  NA  NA 29.10614 9.116934 0.000000 B