如何在 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 中的其他常见错误: