将对数取为大于 0 的数字时产生的 NaN
NaNs produced when taking log to numbers greater than 0
我想将对数变量设为总资产的变量。我喜欢这样:
`HRSdata2$h1logass <- (ifelse(HRSdata2$h1atotb > 0, log(HRSdata2$h1atotb), 0))`
我收到错误消息:In log(HRSdata2$h1atotb) : NaNs produced
我的数据集显示我在采用我预测的 log(NA) 时得到 NA,但是,为什么我得到 NaN?他们更关心我。
也有人可以向我展示 运行 循环或其他将日志应用到一堆列的智能方法的代码吗?目前这是我的(我知道的很差)代码:
HRSdata2$h1logass <- (ifelse(HRSdata2$h1atotb > 0, log(HRSdata2$h1atotb), 0))
HRSdata2$h2logass <- (ifelse(HRSdata2$h2atotb > 0, log(HRSdata2$h2atotb), 0))
HRSdata2$h3logass <- (ifelse(HRSdata2$h3atotb > 0, log(HRSdata2$h3atotb), 0))
HRSdata2$h4logass <- (ifelse(HRSdata2$h4atotb > 0, log(HRSdata2$h4atotb), 0))
HRSdata2$h5logass <- (ifelse(HRSdata2$h5atotb > 0, log(HRSdata2$h5atotb), 0))
HRSdata2$h6logass <- (ifelse(HRSdata2$h6atotb > 0, log(HRSdata2$h6atotb), 0))
HRSdata2$h7logass <- (ifelse(HRSdata2$h7atotb > 0, log(HRSdata2$h7atotb), 0))
HRSdata2$h8logass <- (ifelse(HRSdata2$h8atotb > 0, log(HRSdata2$h8atotb), 0))
HRSdata2$h9logass <- (ifelse(HRSdata2$h9atotb > 0, log(HRSdata2$h9atotb), 0))
HRSdata2$h10logass <- (ifelse(HRSdata2$h10atotb > 0, log(HRSdata2$h10atotb), 0))
我基本上只需要学习如何循环变量名谢谢。
当您执行 ifelse(x > 0, log(x), 0)
时,R 计算 log(x)
:
> x <- c(2, -1, 3)
> ifelse(x > 0, log(x), 0)
[1] 0.6931472 0.0000000 1.0986123
Warning message:
In log(x) : NaNs produced
但是在结果中你没有得到 NaN
,你得到 0
对应于 x <= 0
.
的值
这个ifelse
语句等同于
ifelse(c(TRUE, FALSE, TRUE), c(log(2), log(-1), log(3)), c(0,0,0))
R 不会丢弃第一个参数值为 FALSE
.
的第二个参数值的计算
我个人不喜欢 ifelse
并且倾向于使用两行代码来代替填充默认值,然后有条件地应用替代项。
要遍历所有列,您可以使用以下代码(我没有测试它,因为没有数据)
for(i in 1:10){
HRSdata2[,paste0('h',i,'logass')] <- 0
w <- which(HRSdata2[,paste0('h',i,'atotb')] > 0)
HRSdata2[w,paste0('h',i,'logass')] <- HRSdata2[w,paste0('h',i,'atotb')]
}
此代码将为 NA 值输出零,如果不需要,您应该替换:
w <- which(HRSdata2[,paste0('h',i,'atotb')] > 0)
与:
w <- which(HRSdata2[,paste0('h',i,'atotb')] > 0 | is.na( HRSdata2[,paste0('h',i,'atotb')] ) )
我想将对数变量设为总资产的变量。我喜欢这样:
`HRSdata2$h1logass <- (ifelse(HRSdata2$h1atotb > 0, log(HRSdata2$h1atotb), 0))`
我收到错误消息:In log(HRSdata2$h1atotb) : NaNs produced
我的数据集显示我在采用我预测的 log(NA) 时得到 NA,但是,为什么我得到 NaN?他们更关心我。
也有人可以向我展示 运行 循环或其他将日志应用到一堆列的智能方法的代码吗?目前这是我的(我知道的很差)代码:
HRSdata2$h1logass <- (ifelse(HRSdata2$h1atotb > 0, log(HRSdata2$h1atotb), 0))
HRSdata2$h2logass <- (ifelse(HRSdata2$h2atotb > 0, log(HRSdata2$h2atotb), 0))
HRSdata2$h3logass <- (ifelse(HRSdata2$h3atotb > 0, log(HRSdata2$h3atotb), 0))
HRSdata2$h4logass <- (ifelse(HRSdata2$h4atotb > 0, log(HRSdata2$h4atotb), 0))
HRSdata2$h5logass <- (ifelse(HRSdata2$h5atotb > 0, log(HRSdata2$h5atotb), 0))
HRSdata2$h6logass <- (ifelse(HRSdata2$h6atotb > 0, log(HRSdata2$h6atotb), 0))
HRSdata2$h7logass <- (ifelse(HRSdata2$h7atotb > 0, log(HRSdata2$h7atotb), 0))
HRSdata2$h8logass <- (ifelse(HRSdata2$h8atotb > 0, log(HRSdata2$h8atotb), 0))
HRSdata2$h9logass <- (ifelse(HRSdata2$h9atotb > 0, log(HRSdata2$h9atotb), 0))
HRSdata2$h10logass <- (ifelse(HRSdata2$h10atotb > 0, log(HRSdata2$h10atotb), 0))
我基本上只需要学习如何循环变量名谢谢。
当您执行 ifelse(x > 0, log(x), 0)
时,R 计算 log(x)
:
> x <- c(2, -1, 3)
> ifelse(x > 0, log(x), 0)
[1] 0.6931472 0.0000000 1.0986123
Warning message:
In log(x) : NaNs produced
但是在结果中你没有得到 NaN
,你得到 0
对应于 x <= 0
.
这个ifelse
语句等同于
ifelse(c(TRUE, FALSE, TRUE), c(log(2), log(-1), log(3)), c(0,0,0))
R 不会丢弃第一个参数值为 FALSE
.
我个人不喜欢 ifelse
并且倾向于使用两行代码来代替填充默认值,然后有条件地应用替代项。
要遍历所有列,您可以使用以下代码(我没有测试它,因为没有数据)
for(i in 1:10){
HRSdata2[,paste0('h',i,'logass')] <- 0
w <- which(HRSdata2[,paste0('h',i,'atotb')] > 0)
HRSdata2[w,paste0('h',i,'logass')] <- HRSdata2[w,paste0('h',i,'atotb')]
}
此代码将为 NA 值输出零,如果不需要,您应该替换:
w <- which(HRSdata2[,paste0('h',i,'atotb')] > 0)
与:
w <- which(HRSdata2[,paste0('h',i,'atotb')] > 0 | is.na( HRSdata2[,paste0('h',i,'atotb')] ) )