R语言如何修复:Invalid factor level, NA generated in R

R语言如何修复:Invalid factor level, NA generated in R

在这篇文章中,我们将通过实例来研究如何修复错误: 无效的因子水平,生成NA。

当程序员试图向R语言中的因子变量添加一个事先不存在的定义水平的值时,编译器会产生这样的警告信息。完整的警告信息在下面给出。

Warning message:
In `[<-.factor`(`*tmp*`, iseq, value = "C") :
  invalid factor level, NA generated 

何时可能发生错误

让我们创建一个数据框。

# Create a data frame
dataframe < - data.frame(team=factor(c('Alpha', 'Alpha',
                                       'Beta', 'Beta',
                                       'Charlie', 'Charlie',
                                       'Charlie')),
                         points=c(96, 91, 86, 89, 93, 87, 91))
  
# Display the data frame
dataframe
  
# Display the structure of the data frame
str(dataframe)

输出

R语言如何修复:Invalid factor level, NA generated in R

在这个例子中,团队变量只有三种类型的值:”Alpha”、”Beta”、”Charlie”。现在,我们将尝试在数据框的最后插入一个额外的行,该行的队名等于 “Gamma”。

例子

# Create a data frame
dataframe <- data.frame(team=factor(c('Alpha', 'Alpha', 
                                      'Beta', 'Beta',
                                      'Charlie', 'Charlie',
                                      'Charlie')),
                 points=c(96, 91, 86, 89, 93, 87, 91))
  
#add new row to end of data frame
dataframe[nrow(dataframe) + 1,] = c('Gamma', 99)

输出

R语言如何修复:Invalid factor level, NA generated in R

输出

编译器产生了警告信息。这是因为 “Gamma “这个值还没有出现在团队列下。请注意,这只是一个警告信息,编译器会自动在数据框的末尾插入一个新的行,但单元格中没有 “Gamma”,其值将等于NA。

# Create a data frame
dataframe <- data.frame(team=factor(c('Alpha', 'Alpha',
                                      'Beta', 'Beta',
                                      'Charlie', 'Charlie',
                                      'Charlie')),
                 points=c(96, 91, 86, 89, 93, 87, 91))
  
# add new row to end of data frame
dataframe[nrow(dataframe) + 1,] = c('Gamma', 99)
  
# Display the dataframe
dataframe

输出

R语言如何修复:Invalid factor level, NA generated in R

如何避免这个警告

我们可以通过首先将因子变量转换为字符变量,然后在添加额外的行之后再将其转换为因子变量来摆脱这个警告。

例子

# Create a data frame
dataframe <- data.frame(team=factor(c('Alpha', 'Alpha',
                                      'Beta', 'Beta', 
                                      'Charlie', 'Charlie',
                                      'Charlie')),
                 points=c(96, 91, 86, 89, 93, 87, 91))
  
# Convert team variable to character
dataframeteam <- as.character(dataframeteam)
  
# Insert a new row to end of data frame
dataframe[nrow(dataframe) + 1,] = c('Gamma', 99)
  
# Transform team variable back to factor
dataframeteam <- as.factor(dataframeteam)
  
# Display the data frame
dataframe

输出

R语言如何修复:Invalid factor level, NA generated in R

正如你在输出中看到的,警告以及 “NA “的东西已经从数据框架中消除了。现在让我们来显示一次修改后的数据框架的结构。

# Create a data frame
dataframe <- data.frame(team=factor(c('Alpha', 'Alpha', 
                                      'Beta', 'Beta', 
                                      'Charlie', 'Charlie',
                                      'Charlie')),
                 points=c(96, 91, 86, 89, 93, 87, 91))
  
# Convert team variable to character
dataframeteam <- as.character(dataframeteam)
  
# Insert a new row to end of data frame
dataframe[nrow(dataframe) + 1,] = c('Gamma', 99)
  
# Transform team variable back to factor
dataframeteam <- as.factor(dataframeteam)
  
# Display the structure of the data frame
str(dataframe)

输出

R语言如何修复:Invalid factor level, NA generated in R

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程