当我运行标准偏差时获得"NA"

evt*_*evt 9 statistics r na stdev

快问.我将csv文件读入变量data.它有一个列标签var,它有数值.

当我运行命令

sd(data$var)
Run Code Online (Sandbox Code Playgroud)

我明白了

[1] NA 
Run Code Online (Sandbox Code Playgroud)

而不是我的标准差.

你能帮我弄清楚我做错了什么吗?

nzc*_*ops 28

尝试sd(data$var, na.rm=TRUE)然后忽略列var中的任何NA.还将支付检查你的数据,以确保NA的应NA的,有没有被错误读取,命令一样head(data),tail(data)str(data)应与帮助.

  • 我在你的答案中添加了`str()`,因为我发现它对这些调试任务很有帮助,但并不认为这是自己的答案.希望你不介意,随意回滚. (3认同)
  • `summary(data)`可能是查看数据中是否有'NA`的最简单方法. (2认同)

Jef*_*ker 12

我曾经犯过一两次在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.
Run Code Online (Sandbox Code Playgroud)


mds*_*ner 5

您可能缺少值var,或者列不是数字,或者只有一行.

尝试删除缺少的值,这将有助于第一种情况:

sd(dat$var, na.rm = TRUE)
Run Code Online (Sandbox Code Playgroud)

如果这不起作用,请检查

class(dat$var)
Run Code Online (Sandbox Code Playgroud)

是"数字"(第二种情况)和那

nrow(dat)
Run Code Online (Sandbox Code Playgroud)

大于1(第三种情况).

最后,dataR中的函数最好使用不同的名称,我在这里做过.