简短的问题。我把我的csv文件读入到变量data
中。它有一个列标签var
,其中包含数字值。
当我运行以下命令时:
sd(data$var)
我获得
[1] NA
我想使用标准差,而不是我的平均偏差。
你能帮我找出问题在哪里吗?
简短的问题。我把我的csv文件读入到变量data
中。它有一个列标签var
,其中包含数字值。
当我运行以下命令时:
sd(data$var)
我获得
[1] NA
我想使用标准差,而不是我的平均偏差。
你能帮我找出问题在哪里吗?
尝试使用 sd(data$var, na.rm=TRUE)
,然后列 var 中的任何 NAs 都将被忽略。还应检查数据以确保 NA 是 NA,而不是读入错误,像 head(data)
、tail(data)
和 str(data)
这样的命令可以帮助实现这一点。
我犯过几次错误,即在 dplyr 的字符串中重复使用变量名,这导致了问题。
mtcars %>%
group_by(gear) %>%
mutate(ave = mean(hp)) %>%
ungroup() %>%
group_by(cyl) %>%
summarise(med = median(ave),
ave = mean(ave), # should've named this variable something different
sd = sd(ave)) # this is the sd of my newly created variable "ave", not the original one.
您的 var
可能存在缺失值,或该列不是数字,或只有一行。
尝试移除缺失值可以解决第一个问题:
sd(dat$var, na.rm = TRUE)
class(dat$var)
是“numeric”(第二种情况),
并且nrow(dat)
大于1(第三种情况)。
最后,data
是R语言中的一个函数,因此最好使用不同的名称,这里我已经更改了名称。
数据中可能存在Inf
或-Inf
作为值。
尝试
is.finite(data)
或者
min(data, na.rm = TRUE)
max(data, na.rm = TRUE)
来检查是否确实如此。
str()
,因为我发现它对于这些调试任务很有帮助,但我觉得这并不值得另外写一篇答案。希望你不介意,如果需要可以回滚。 - Chasesummary(data)
可能是最简单的方法来查看数据中是否存在NA
。 - Gavin Simpson