Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R:将字符串值更改为NA,获取强制错误_R - Fatal编程技术网

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)