R:将字符串值更改为NA,获取强制错误
我有一个名为R:将字符串值更改为NA,获取强制错误,r,R,我有一个名为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))
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))
但是,我收到一条错误消息,说NAs是通过强制引入的。如何将所有值转换为数字并避免出现此错误?这不是一个错误,只是一条警告消息 1)我们可以用
suppressWarnings
data$Count <- suppressWarnings(as.numeric(data$Count)))
3)或者另一个选项是基于非数字字符将元素替换为NA
library(stringr)
data %>%
mutate(Count = as.numeric(replace(Count,
str_detect(Count, '\\D'), NA)))
我们可以在summary
或mutate
data %>%
mutate(Count = sum(as.numeric(replace(Count, str_detect(Count, '\\D'), NA)), na.rm = TRUE))
有很多方法可以做到这一点
两种方法包括-
使用grepl
我们可以将Population
列中具有非数字字符的所有值转换为NA
,并将其转换为数字
完成此操作后,您可以像往常一样使用na.rm=TRUE
执行所有数学运算
mean(df$Population, na.rm = TRUE)
sum(df$Population, na.rm = TRUE)
这不是一条错误消息,只是一个警告
data %>%
mutate(Count = sum(as.numeric(replace(Count, str_detect(Count, '\\D'), NA)), na.rm = TRUE))
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
df$Population <- readr::parse_number(df$Population)
mean(df$Population, na.rm = TRUE)
sum(df$Population, na.rm = TRUE)