如何在 R 中完成数据框缺失的单元格?

How to fulfill missing cells of a data frame in R?

我有一个这样的数据集。

df = data.frame( name= c("Tommy", "John", "Dan"), age = c(20, NA, NA) )

我试着设置 15 y.o。给约翰和丹。

df[ ( df$age != 20) , ]$age = 15

但是我得到如下错误,

Error in [<-.data.frame(tmp, (df$age != 20), , value = list(name = c(NA_integer_, : missing values are not allowed in subscripted assignments of data frames

为这些缺失的单元格设置新值的好方法是什么?

试试这个:

df$age[is.na(df$age)] <- 15

或使用您的语法风格:

df[is.na(df$age), ]$age = 15

您得到的错误是因为 df$age != 20 产生以下内容:

[1] FALSE    NA    NA

age 列中的 NA 值在逻辑语句中未被正确解释为不等于二十。

我们可以使用is.na

library(data.table)
setDT(df)[is.na(age), age:= 15]

如果您想修改所有非 20 岁的单元格,包括年龄的其他有效值,我会执行以下操作:

# Creating a data frame with another valid age
df = data.frame( name= c("Tommy", "John", "Dan","Bob"), age = c(20, NA, NA,12) )

# Substitute values different than 20 for 15
df[df$age!=20 | is.na(df$age),"age"] <- 15

   name age
1 Tommy  20
2  John  15
3   Dan  15
4   Bob  15