【发布时间】:2020-02-06 13:31:34
【问题描述】:
假设我有以下两个数据框(行不均匀)
set.seed(1999)
dfA <- data.frame(x = rpois(10,2), y = rpois(10,2), z = rpois(10,2), q = rpois(10,2), t = rpois(10,2))
set.seed(24)
dfB <- data.frame(a = rpois(10,2), b = rpois(10,2), c = rpois(10,2), d = rpois(10,2), e = rpois(10,2))
set.seed(10)
Dx <- sample.int(5)
set.seed(6)
Dy <- sample.int(5)
Dx <- as.data.frame(Dx)
Dx <- as.data.frame(transpose(Dx))
Dy <- as.data.frame(Dy)
Dy <- as.data.frame(transpose(Dy))
dfAB <- map2_df(dfA, dfB, str_c, sep=",") %>%
rename_all(~ str_c('C', seq_along(.)))
dfXY <- map2_df(Dx, Dy, str_c, sep=",") %>%
rename_all(~ str_c('C', seq_along(.)))
现在我有 2 个坐标数据集(dfAB 5 个变量,每个变量有 10 个观察值,数据集 dfXY 5 个变量有 1 个观察值)。
我想要一个新的数据框,其中包含 dfXY 变量 1 的观察值与 dfAB 变量 1 中的每个单独观察值之间的距离、dfXY 变量 2 的观察值 1 和变量 2 中每个单独观察值之间的距离dfAB等
如果我们有
dfAB dfXY
3,1 3,2 ... 3,5 1,2 2,1 5,4 4,3
2,1 3,1
2,3 1,2
... ...
那么新的数据框应该包含以下距离:a) 3,5 & 3,1 b) 3,5 & 2,1 c) 3,5 & 2,3 等...
以及之间的距离:a) 1,2 & 3,2 b) 1,2 & 3,1 c) 1,2 & 1,2 等。
依此类推,所需的输出格式为:
dfABXY
C1: C2: C3: C4: C5 etc...
4.000000 2.000000 1.000000 3.605551
4.123106 2.236068 1.414214 3.605551
2.236068 0.000000 2.236068 4.242641
3.162278 0.000000 1.000000 3.605551
3.162278 1.414214 2.000000 2.000000
etc... etc... etc... etc...
但是当我使用时:
distances <- map2_df(
dfAB,
dfXY,
~ sqrt((.x$x - .y$x)^2 + (.x$y - .y$y)^2)
)
我收到错误Error in .x$x : $ operator is invalid for atomic vectors
我想我需要使用类似 for(i in seq_along()) 的函数,但我不知道如何合并 ~ sqrt((.x$x - .y$x)^2 + (.x$y - .y$y)^2)
distance <- for(i in seq_along(dfXY)){
dfAB[,i] <- dfAB[,i] [WHAT TO PUT HERE]
请注意,我的实际数据集是数千行和列,因此我手动调用行/列是不可行的。
非常感谢任何帮助
【问题讨论】:
标签: r dataframe coordinates