我有2个数据帧
a = c(1,1,3)
b = c(7,2,1)
c = c(2,4,2)
d1 = cbind(a,b,c)
d = c(2,1,6)
e = c(1,4,2)
f = c(4,8,4)
d2 = cbind(d,e,f)
Run Code Online (Sandbox Code Playgroud)
如何在每个点轻松获取最大值的数据框
_fun(d1,d2)
a b c
[1,] 2 7 4
[2,] 1 4 8
[3,] 6 2 4
Run Code Online (Sandbox Code Playgroud)
我可以使用循环来实现它,但对于大数据帧来说它非常慢.
谢谢!
我们可以将数据集保存在a中list并do.call与fas一起使用pmax.
do.call(pmax, list(d1, d2))
# a b c
#[1,] 2 7 4
#[2,] 1 4 8
#[3,] 6 2 4
Run Code Online (Sandbox Code Playgroud)
或pmax直接使用
pmax(d1, d2)
Run Code Online (Sandbox Code Playgroud)
编辑:根据@ nicola的评论.
它可能更快使用pmax.int,但转换回matrix可能会更慢.
matrix(pmax.int(d1, d2), dim(d1))
Run Code Online (Sandbox Code Playgroud)
set.seed(24)
m1 <- matrix(sample(0:9, 5000*5000, replace=TRUE), ncol=5000)
set.seed(48)
m2 <- matrix(sample(0:9, 5000*5000, replace=TRUE), ncol=5000)
akrun1 <- function() pmax(m1, m2)
akrun2 <- function() matrix(pmax.int(m1, m2), dim(m1))
colonel <- function() ifelse(m1 > m2, m1, m2)
system.time(akrun1())
# user system elapsed
# 0.850 0.033 0.885
system.time(akrun2())
# user system elapsed
# 1.090 0.021 1.114
system.time(colonel())
# user system elapsed
# 5.049 0.336 5.395
Run Code Online (Sandbox Code Playgroud)