我的小标题:
Excel中的数据:
impute <- read_excel(choose.files())
imp <- function(df) {
for(i in 1:ncol(df)){
df[is.na(df[,i]),i] <- mean(df[,i],na.rm = T)
}
}
imp(impute)
警告消息:
1:在mean.default(df[, i], na.rm = T)
中:
参数不是数字或逻辑:返回NA
2:在mean.default(df[, i], na.rm = T)
中:
参数不是数字或逻辑:返回NA
上面的代码在插补到Data.Frame的情况下可以正常工作,但如果是Tibble,则无法工作。如果我要使用Tibble,有人可以让我知道如何更改代码。
答案 0 :(得分:1)
data.frame
和小标题之间的区别之一是,默认情况下,数据帧会降低尺寸,而小标题则不会。
也就是说,如果x
是数据帧,则x[, i]
可能是也可能不是数据帧,具体取决于i
。如果i
是一个值,则x[, i]
将只是一个向量。如果i
是具有多个值的向量,则x[, i]
将是一个数据帧。当i
是一个可能具有多个值或可能没有多个值的变量时,这可能会导致错误,因为类可能有所不同(修复方法是使用x[, i, drop = FALSE]
以保证返回data.frame
)
小标题试图通过将默认的drop = TRUE
切换为drop = FALSE
来解决此问题,因此x[, i]
是小标题,而不管i
的长度是1还是更长。
在计算平均值时,您希望将df[,i]
视为数字矢量,而不是包含1列的小标题,因此需要指定它:
df[[i]] # This is the preferred way to extract a single column
df[, i, drop = TRUE] # this will work too (since tibble version 1.4.1)
Tibbles vignette的“标题与数据框架”部分对此进行了详细说明。