【发布时间】:2019-04-28 00:02:09
【问题描述】:
我需要计算数据框中第一行和当前行之间的欧几里得距离。每行由(组,月)键控,并具有一个值列表。在下面的玩具示例中,键是 c(month, student),值在 c(A, B) 中。我想创建一个距离列 C,它等于 sqrt((A_i-A_1)^2 + (B_i - B_1)^2)。
到目前为止,我设法传播了我的数据并将每个组的第一个值拉入新列。虽然我可以在玩具示例中手动创建公式,但在我的实际数据中,我有很多列而不是只有 2 列。我相信我可以在 mutate_all 中创建平方差,然后进行行求和并取平方根,但到目前为止还没有运气。
df <- data.frame(month=rep(1:3,2),
student=rep(c("Amy", "Bob"), each=3),
A=c(9, 6, 6, 8, 6, 9),
B=c(6, 2, 8, 5, 6, 7))
# Pull in each column's first values for each group
df %>%
group_by(student) %>%
mutate_all(list(first = first)) %>%
# TODO: Calculate the distance, i.e. SQRT(sum_i[(x_i - x_1)^2]).
#Output:
month student A B month_first A_first B_first
1 1 Amy 9 6 1 9 6
2 2 Amy 6 2 1 9 6
...
期望的输出:
#Output:
month student A B month_first A_first B_first dist_from_first
1 1 Amy 9 6 1 9 6 0
2 2 Amy 6 2 1 9 6 5
...
【问题讨论】:
-
你能写出 A 和 B 并且 dist_from_first 是在你想要的输出示例中计算出来的
-
dist_from_first 是 Row 的值与 Row 对应组的第一个 Row 的值之间的距离。 IE。 Sqrt((9-9)^2 + (6-6)^2) = 0, Sqrt((9-6)^2+(6-2)^2) = Sqrt(25)=5。
-
euc_dist % mutate(dist_from_first = euc_dist(A_first,A,B_first,B))
标签: r dplyr distance tidyverse tidyr