【发布时间】:2011-04-21 04:28:00
【问题描述】:
快速提问。我将 csv 文件读入变量 data。它有一个列标签var,其中有数值。
当我运行命令时
sd(data$var)
我明白了
[1] NA
而不是我的标准差。
你能帮我弄清楚我做错了什么吗?
【问题讨论】:
标签: r statistics na stdev
快速提问。我将 csv 文件读入变量 data。它有一个列标签var,其中有数值。
当我运行命令时
sd(data$var)
我明白了
[1] NA
而不是我的标准差。
你能帮我弄清楚我做错了什么吗?
【问题讨论】:
标签: r statistics na stdev
尝试sd(data$var, na.rm=TRUE),然后列 var 中的任何 NA 都将被忽略。还需要检查您的数据以确保 NA 应该是 NA 并且没有读取错误,head(data)、tail(data) 和 str(data) 等命令应该对此有所帮助。
【讨论】:
str(),因为我发现它对此类调试任务很有帮助,但不认为它有必要提供自己的答案。希望您不介意,请随时回滚。
summary(data) 可能是查看数据中是否存在NA 的最简单方法。
我曾经一两次在 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)
是“数字”(第二种情况)并且
nrow(dat)
大于 1(第三种情况)。
最后,data 是 R 中的一个函数,所以最好使用不同的名称,我已经在这里完成了。
【讨论】:
数据中可能有Inf 或-Inf 作为值。
试试
is.finite(data)
或
min(data, na.rm = TRUE)
max(data, na.rm = TRUE)
检查是否确实如此。
【讨论】: