r - 两个大小不等的数据框之间的距离
问题描述
我有两个大小不等的数据框:
>df1
b c d
a 2 3 4
>df2
g h i
e 1 1 5
f 0 4 3
我需要计算这些数据帧的元素之间的距离,方法是df1
从 中的每一行中减去其中包含的值df2
,因此我想得到:
c d e
a 1 2 1
b 2 1 1
由于大小不等,尝试>myfunc1 <- function(x1,x2){abs(x1 - x2)} myfunc1(df1, df2)
也df3 <- abs(df2 - df1)
无济于事。
解决方案
require(purrr)
map2_df(df1, df2, ~abs(.x - .y))
或者 Gregor 的方法:abs(df2 - df1[rep(1, nrow(df2)), ])
从我有限的测试来看,map2_df
似乎更快
df1 <- fread( "
b c d
2 3 4
")
df2 <- fread("
g h i
1 1 5
0 4 3
")
df1 <- rbindlist(replicate(10000, df1, simplify = F))
df2 <- rbindlist(replicate(10000, df2, simplify = F))
require(purrr)
f1 <- function(){
map2_df(df1, df2, ~abs(.x - .y))
}
f2 <- function(){
abs(df2 - df1[rep(1, nrow(df2)), ])
}
library(microbenchmark)
microbenchmark(f1(), f2())
#Unit: microseconds
# expr min lq mean median uq max neval
# f1() 727.385 891.4875 1268.775 956.923 1471.179 4651.075 100
# f2() 1737.025 2011.2815 2666.744 2218.666 2889.846 8572.715 100
推荐阅读
- python - 不明白熊猫系列中这个 KeyError 的原因
- reactjs - 如何使用汇总反应正确捆绑和导入 css - 无法从 node_modules 中导入全局 CSS
- javascript - 从列表中选择的对象读取 [object Object]
- excel - 第二次运行相同的 VBAcode 时出现错误消息 462
- javascript - 如何从外部样式表中选择带有 jquery 的 css 类
- android - Jetpack compose 的 TextField 中的 drawableStart 等效项
- javascript - 如何延迟这只是一种可能性
- mongodb - MongoDB 图和引用来自另一个文档的节点和边
- java - 不能在Java中将整数和双倍相乘?
- javascript - 自动完成不会突出显示默认值