数据帧的替换结果为r

  • 本文关键字:结果 替换 数据帧 r
  • 更新时间 :
  • 英文 :


我有一个data.frame,如

x= data.frame("w"=c(1,2,3,4,5),"z"=c(2,Inf,Inf,5, Inf))

,我想计算以下公式:

exp(x$w) - exp(x$z)
> exp(x$w) - exp(x$z)
[1]  -4.670774       -Inf       -Inf -93.815009       -Inf

我的目标是替换exp(x$w)而不是所有-Inf结果。如何在R中有效地做到这一点?这意味着我想要的最终结果如下:(-4.670774,7.389056, 20.085537, -93.815009,148.413159)

你的意思是像下面这样吗?

> do.call("-", Map(function(v) exp(replace(v, is.infinite(v), -Inf)), x))
[1]  -4.670774   7.389056  20.085537 -93.815009 148.413159

> do.call("-", replace(exp(x), is.infinite(as.matrix(x)), 0))
[1]  -4.670774   7.389056  20.085537 -93.815009 148.413159

> with(
+   x,
+   exp(w) - exp(ifelse(is.infinite(z), -Inf, z))
+ )
[1]  -4.670774   7.389056  20.085537 -93.815009 148.413159

> with(
+   x,
+   exp(w) - exp(z * (1 - 2 * is.infinite(z)))
+ )
[1]  -4.670774   7.389056  20.085537 -93.815009 148.413159

我建议您可以尝试library(dplyr)中的case_when()函数来说明z的条件:

library(dplyr)
x %>%
dplyr::mutate(z, z= case_when(z == Inf~ exp(w),
z != Inf ~ exp(z)))

控制台输出:

#  w          z
#1 1   7.389056
#2 2   7.389056
#3 3  20.085537
#4 4 148.413159
#5 5 148.413159

最新更新