R:将String值更改为NA,得到强制错误

问题描述

我有一个名为data的数据集,看起来像这样:

  Year  Population
1 2005  3000  
2 2006  4000 
3 2007  5000
4 2008  6000
5 2009  NP
6 2010  NP
7 2011  NP
8 2012  6000
9 2013  3000

我想获取count列的平均值,但是由于NP不是数字值,因此我想将其转换为NA。我使用了以下代码:

data %>% mutate(Count = as.numeric(Count))

但是,我收到一条错误消息,说强制性引入了NA。如何将所有值转换为数字并避免出现此错误?

解决方法

这不是错误,只是警告消息。

1)我们可以用Spreedly.on('paymentMethod')

换行
suppressWarnings

例如

data$Count <- suppressWarnings(as.numeric(data$Count)))

最直接的转换方法是应用v1 <- c(1,2,3,'a','b') suppressWarnings(as.numeric(v1)) #[1] 1 2 3 NA NA 而不进行任何其他操作。 as.numeric是一封友好的消息。

2)如果我们想在没有警告的情况下转换为warning,则另一种选择是将numeric替换为`NA

NP

3)或另一种选择是基于非数字字符将library(dplyr) data %>% mutate(Count = as.numeric(na_if(Count,'NP'))) 的元素replace

NA

我们可以在library(stringr) data %>% mutate(Count = as.numeric(replace(Count,str_detect(Count,'\\D'),NA))) summarise内获得摘要输出

mutate
,

您可以通过多种方式执行此操作。

多种方式包括-

  1. 使用grepl,我们可以将Population列中具有非数字字符的所有值都转换为NA,并将其转换为数字。
df$Population[grepl('\\D',df$Population)] <- NA
df$Population <- as.numeric(df$Population)
df

#  Year Population
#1 2005       3000
#2 2006       4000
#3 2007       5000
#4 2008       6000
#5 2009         NA
#6 2010         NA
#7 2011         NA
#8 2012       6000
#9 2013       3000
  1. 使用parse_number
df$Population <- readr::parse_number(df$Population)

完成此操作后,您可以像往常一样使用na.rm = TRUE执行所有数学运算。

mean(df$Population,na.rm = TRUE)
sum(df$Population,na.rm = TRUE)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...