【发布时间】:2022-08-03 23:01:04
【问题描述】:
我想遍历 r 数据框中的很多列,并将 NA 替换为列均值。
我可以得到这样的列的平均值
mean(df$col20, na.rm = TRUE)
但这会得到警告:参数不是数字或逻辑:返回 NA
mean(df[ , 20], na.rm = TRUE)
我用一个包含一些 NA 的小虚拟 df 尝试了上述语法,它工作正常。知道还有什么可以解决这个问题吗?
附言。 head(df[20]) 告诉我它是一个 dbl,而 str(df) 说它是 num。
(并且 [ , 20] 是一个例子;我实际上收到了很多警告,因为它确实位于 for 循环中 - 但我已经单独执行了该行作为测试)
-
如果列不是数字,则平均值没有意义......
-
如果您的
df是一个小标题,那么用方括号 ([) 将其子集将返回一个小标题,您无法直接在小标题上计算mean -
列中有字符。
mean(as.numeric(df$col20), na.rm = TRUE)会得到正确的结果。 -
如果你正在循环,那么你可以做
mean(df[[20]],na.rm=TRUE)where[[总是返回包含tibble和data.frame的单列;[\ 的行为(正如 benson23 敏锐地指出的那样)是不一致的。
标签: r