相关文章推荐

这篇的主角是R语言中缺失值(NA)的识别与提取。先介绍NAN、Inf及其运算。在最终介绍缺失值(NA),毕竟重要的都压轴嘛。

1、Inf

在实数轴上除了确定的有限点,还有两个无限:正无穷、负无穷。用 Inf -Inf 表示。

[1] Inf [1] -Inf [1] Inf [1] -Inf

2、NAN(Not a Number)

NAN Not a Number 的简称。在R语言中什么是不确定的数呢?下面通过代码给出例子,大家自己推理总结。

[1] NaN > Inf/Inf [1] NaN > Inf -Inf [1] NaN > Inf -Inf [1] NaN

上面的不难看出一般很犹豫的值就会显示不是一个数。但是也有一些奇怪的(违反数学分析的极限定理)需要大家记住。方便理解后面的逻辑。

> 0^Inf
[1] 0
> Inf^0
[1] 1
[1] 1

3、NA与逻辑运算符

大家先思考一下下面的逻辑表达式的值:NA == 1、NA == NA、NA > 0、NA + 1、NA * 1、NA / 1会是什么?

> NA == 1
[1] NA
> NA == NA
[1] NA
[1] NA
> NA + 1
[1] NA
> NA * 1
[1] NA
> NA / 1
[1] NA

NA会对一般的逻辑运算加减运算免疫,这是为什么呢?。其实很好理解,我么可以把NA理解为不知道的一个数(这里注意和不确定(NAN)区别),对于不知道的一个数NA我们一般会结合if.na函数来判断转化处理缺失值。在看下面的例子:
例子1:

> NA | T
[1] TRUE
[1] FALSE
[1] NA
> NA | F
[1] NA

理解上述两个例子需要知道逻辑值的逻辑。我一般用一句话来区别:非空非零为假。当然下面的例子三我就不解释了。结合上面的知识就很显然了。
例子3:

[1] 1 [1] NA

水平有限,如有错误评论区指出。希望帮助大家理解处理R语言中的缺失值。

目录00引言1、Inf2、NAN(Not a Number)3、NA与逻辑运算符4、总结00引言这篇的主角是R语言中缺失值(NA)的识别与提取。先介绍NAN、Inf及其运算。在最终介绍缺失值(NA),毕竟重要的都压轴嘛。1、Inf在实数轴上除了确定的有限点,还有两个无限:正无穷、负无穷。用Inf、-Inf表示。> Inf[1] Inf> -Inf[1] -Inf&gt...
R语言处理缺失值 在处理数据过程中,避免不了会产生一些缺失值,如未填写数据或者编码错误等原因,用NA表示缺失值。在R语言中,is.na()函数可以判断元素是否是缺失值,从而返回逻辑值(TRUE/FALSE),所以该函数将会返回和元数据集一样大小的数据集。在判断缺失值的过程中,需要注意以下两点: 一是缺失值是不可以比较的,即不可以用缺失值去寻找缺失值,如var == NA返回的结果永远不会是true。 二是R语言中不会将正无穷和负无穷写成NA,分别用 Inf 和 –Inf 所标记。 既然缺失值可能无处不在,那么在数据分析过程中可以采取如下的方法去除缺失值: 一是很多数值函数都拥有一个 na.rm
#前二种算法可以计算缺失数据,但随机森林不行,所以还需将数据进行清洗整理 data(algae) algae <- algae[-manyNAs(algae,0.2), ]#占有20%的NA值的行去掉 clean.algae <- knnImputation(algae,k=10)#平均值填充NA值 #回归树模型计算 model.tree=rpart(a1 ~ ., data = clean.algae[, 1:12]) summary(model.tree) pre.tree <- predict(model.tree, clean.algae) plot(pre.tree~clean.algae$a1) nmse1 <- mean((pre.tree- clean.algae[,'a1'])^2)/mean((mean(clean.algae[,'a1'])- clean.algae[,'a1'])^2) nmse1
主要是通过R语言,对日期数据进行处理,并补全缺失数据 rawdata<- read.csv("C:/Users/li/Desktop/ss.csv",fill=F) #提取数据 ss1,并组合数据------------------------------- ts1<-rawdata$ts1 ts11<-as.Date(ts1,'%Y/%m/%d') false<-is.na(ts11) ts21<-ts11[!false] ss1<-rawdata$SS1 ss1<-ss1[!false] library(zoo) data1<-zoo(ss1,ts21) #补全不规则数据(时间的缺失和缺失值) date1<-zoo(,seq(start(data1),end(data1),'day')) datanew1<-merge(data1,date1) datanew1[is.na(datanew1)]<-median(datanew1,na.rm = T) #提取数据 ss2
由于XGBoost和LightGBM对缺失值的处理方法是相同的,因此我们只拿XGBoost来解读 建议大家看下论文,链接:https://www.kdd.org/kdd2016/subtopic/view/xgboost-a-scalable-tree-boosting-system XGBoost是一种boosting的集成学习模型 支持的弱学习器(即单个的学习器,也称基学习器)有树模型(gbtree 1.如果在迭代的100轮以内,出现NaN,一般情况下的原因是因为你的学习率过高,需要降低学习率。可以不断降低学习率直至不出现NaN为止,一般来说低于现有学习率1-10倍即可。 2.如果当前的网络是类似于RNN的循环神经网络的话,出现NaN可能是因为梯度爆炸的原因,一个有效的方式是增加“gradient clipping”(梯度截断来解决) 华中杯赛题已于2021年4月30日(今天)晚上20:00发布,下面是发布网址,大家感兴趣的可以下载查看交流。 今晚(2021年4月30)看了看A题,感觉还行。因为自己这次没参加,就寻思着从建模手和编程手的角度写份思路把,大家有更好的想法和处理技术欢迎再评论区积极留言呀。 本文思路使用的软件是R语言3.6.3版本。编程语言不重要,关键是处理思路。其实大部分工作excel就可以解决。低年级的同学不用太过纠结。 思路会持续更新三天,大家可以关 1 后裔 射手 5 856 0.64 2 孙尚香 射手 5 211 0.10 3 狄仁杰 射手 5 324 0.20 4 李元芳 射手 4 75 0.30 5 安琪拉 法师 5 2324 0.
百分数转化00引言1、思路2、R实现2.1自编函数2.2调用包2.2.1实现2.2.2scale2.2.3suffix总结 在数据的处理中尤其是Rmarkdown的书写时往往需要输出百分数,可是R里核心函数里没有现成函数。本篇总结一下常用的做法。 1、将原有的数字乘以100,在用paste函数粘贴%。 2、函数包的使用。 2、R实现 2.1自编函数 > # 加载核心包
这个错误信息"error in do_one(nmeth) : na/nan/inf in foreign function call (arg 1)"表示在执行函数do_one(nmeth)的过程中出现了错误,具体是由于参数1中包含了NA缺失值)、NaN(不是一个数字)或者Inf(无穷大)导致的。 在R语言中,这个错误通常出现在调用外部函数时参数的数据类型不符合要求,或者参数中包含了无效的数值(如NANaNInf)。这些特殊的数值可能会导致算术运算错误或者计算结果的无穷大值。 解决这个问题的方法有: 1. 检查传递给do_one(nmeth)函数的参数是否包含了NANaNInf这样的特殊数值。可以通过使用函数is.na()、is.nan()和is.finite()来检查参数,并且根据需要对这些特殊数值进行处理。 2. 检查参数的数据类型是否正确,确保参数的类型与外部函数的要求相匹配。可以使用函数typeof()来获取参数的数据类型,并与函数要求的数据类型进行比较。 3. 检查是否有其他函数或代码在调用do_one(nmeth)之前修改了参数的值,导致参数包含了NANaNInf。可以通过打印参数的值或者使用调试工具来跟踪代码执行过程,找出可能导致问题的地方。 总之,要解决这个错误,需要仔细检查传递给do_one(nmeth)函数的参数,确保参数中不包含NANaNInf,并且参数的类型符合外部函数的要求。
 
推荐文章