如何在 r 中修复:下标赋值中不允许缺失值


使用 R 时可能遇到的错误消息是:

 Error in `[<-.data.frame`(`*tmp*`, df$A == 5, , value = list(A = c(NA, : 
  missing values are not allowed in subscripted assignments of data frames

当您尝试使用另一列中的值分配一列中的值,但存在NA值时,通常会发生此错误。

以下示例展示了如何在实践中解决此错误。

如何重现错误

假设我们在 R 中创建以下数据框:

 #create data frame
df <- data. frame (A=c(3, 4, 4, NA, 5, 8, 5, 9),
                 B=c(12, 13, 7, 7, 12, 11, 15, 7))

#view data frame
df

   AB
1 3 12
2 4 13
3 4 7
4 NA 7
5 5 12
6 8 11
7 5 15
8 9 7

现在假设我们尝试为 B 列中的每一行分配值 10,其中 A 列中的对应值为 5:

 #attempt to assign column B a value of 10 where A is equal to 5
df[df$A == 5, ]$B <- 10

Error in `[<-.data.frame`(`*tmp*`, df$A == 5, , value = list(A = c(NA, : 
  missing values are not allowed in subscripted assignments of data frames

我们收到一个错误,因为 A 列中有 NA 值,并且错误消息明确告诉我们数据框的下标赋值中不允许缺失值

如何避免错误

有两种方法可以避免此错误。

1.使用%in%运算符

避免此错误的一种方法是在执行赋值时使用%in%运算符:

 #assign column B a value of 10 where A is equal to 5
df[df$A %in% 5,]$B <- 10

#view updated data frame
df

   AB
1 3 12
2 4 13
3 4 7
4 NA 7
5 5 10
6 8 11
7 5 10
8 9 7

请注意,值 10 已分配给 B 列中的每一行,其中 A 列中的对应值是 5,并且我们没有收到任何错误。

2.使用is.na()

避免此错误的另一种方法是在执行赋值时使用is.na()函数:

 #assign column B a value of 10 where A is equal to 5
df[!is. na (df$A) & df$A == 5, ]$B <- 10

#view updated data frame
df

   AB
1 3 12
2 4 13
3 4 7
4 NA 7
5 5 10
6 8 11
7 5 10
8 9 7

同样,我们可以将值 10 分配给 B 列中的每一行,其中 A 列中的相应值为 5,并且我们不会收到任何错误。

其他资源

以下教程解释了如何修复 R 中的其他常见错误:

如何在 R 中修复:参数涉及不同的行数
如何修复 R:选择未使用的参数时出错
如何在 R 中修复:替换长度为零

添加评论

您的电子邮箱地址不会被公开。 必填项已用*标注