我正在处理名为ggplot2
的内置数据集(diamonds
)。分配到dia1
后,我执行了以下脚本,以便根据克拉值对值进行分组。我收到了关于强制引入NAs
的消息。我不明白这是怎么发生的,因为is.na()
向量的总和等于零也是显而易见的。
#data
library(ggplot2)
dia1 <- diamonds
#logic
x<-1
dia1$carat<-as.character(dia1$carat)
for (i in 1:(length(dia1$carat))){
if (0<(as.numeric(dia1$carat[x]))&(as.numeric(dia1$carat[x]))<=1){
dia1$carat[x]<-"0-1"
}
if (1 < (as.numeric(dia1$carat[x]))&(as.numeric(dia1$carat[x])) <= 2){
dia1$carat[x]<-"1-2"
}
if (2<(as.numeric(dia1$carat[x]))&(as.numeric(dia1$carat[x]))<=3){
dia1$carat[x]<-"2-3"
}
if (3<(as.numeric(dia1$carat[x]))&(as.numeric(dia1$carat[x]))<=4){
dia1$carat[x]<-"3-4"
}
if (4<(as.numeric(dia1$carat[x]))&(as.numeric(dia1$carat[x]))<=5){
dia1$carat[x]<-"4-5"
}
x<-x+1
}
if(0&lt;(as.numeric(dia1 $ carat [x]))&amp; (as.numeric(dia1 $ carat [x]))&lt; :缺少值TRUE / FALSE 需要另外:警告信息:1:强制引入的NAs 2:强制引入的NA
# check if there are any NAs in the data
sum(is.na(dia1$carat))
[1] 0
或者,当NAs
向量明确强制转换为某个字符时,为什么没有引入dia1$carat
,但在后向转换中引入了NAs
?
答案 0 :(得分:2)
问题是我们正在向if()
提供 NA ,请尝试以下示例:
if(NA > 1){1} else {2}
if(NA> 1){:缺少值需要TRUE / FALSE
时出错
在您的情况下,如果我们认为第一行 carat 是"0.23"
,则第一行if()
语句在将其转换为数字后正确评估它,然后如果在范围内指定一个新值"0-1"
。然后第二个if()
正在尝试将"0-1"
转换为数字,因此我们得到NA
。
关于代码的其他建议:
cut()
if(){...} else if(){...} ...
x
变量,我们可以使用i
代替。seq_along()
,summary()
,str()
as.numeric(dia1$carat[x])