[英]in R: how to take value from i+1th row of 1 dataframe and subtract from every row in i+1th column of 2nd dataframe
[英]How to take value from i+1th column of 1 df and calculate distance to values in every row in i+1th column of 2nd df
假设我有以下两个数据框(行不均匀)
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 与 dfAB 变量 2 中每个单独观察值之间的距离,等等.
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 等等。
等等。
如果数据集具有相同数量的观察值,我可以使用:
distances <- map2_df(
dfAB,
dfXY,
~ sqrt((.x$x - .y$x)^2 + (.x$y - .y$y)^2)
)
但是由于 dfXY 只有 1 个观察值(要反复比较),所以这是行不通的。 我想我需要使用类似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]
任何帮助深表感谢
我很难理解你在这里要做的事情,但我认为你可能会让事情变得太过不必要地复杂化。
例如,不是在lapply()
调用中嵌套map2()
调用,我认为您可以在不使用bind_cols()
迭代的情况下获得几乎相同的结果:
dfA <- tibble(x = rpois(10,2), y = rpois(10,2), z = rpois(10,2), q = rpois(10,2), t = rpois(10,2))
dfB <- tibble(x = rpois(10,2), y = rpois(10,2), z = rpois(10,2), q = rpois(10,2), t = rpois(10,2))
df_abt <- dfA %>%
bind_cols(dfB) %>%
select(x, x1, y, y1, z, z1, q, q1, t, t1)
对于数据框 C 和 D,您可以使用带地图的迭代来避免转置它们:
dfC <- map(1:5, ~ .x) %>% bind_cols()
dfD <- map(11:15, ~.x) %>% bind_cols()
df_cdt <- dfC %>%
bind_cols(dfD) %>%
select(V1, V11, V2, V21, V3, V31, V4, V41, V5, V51)
(实际上为什么不将 df_cdt 存储为向量?是否有理由需要将其作为数据框?)
至于距离,我认为这应该可行:
df_dist <- map2_df(df_abt, df_cdt, ~ sqrt((.x - .y)^2))
如果 df_abt 中的行数不相等,为什么不用 NA 填充缺失的行呢? 我的意思是,它不会让你构建一个包含不同长度列的数据框。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.