筛选出有问题的0和NA条目的代码

时间:2018-09-13 20:29:21

标签: r rstudio

这里是新手,如果/在任何时候我听起来像个白痴,我都深表歉意。

我正在RStudio工作。我已经从excel导入了数据文件。它有几列带有健康信息的列,例如年龄,血压,BMI和其他一些信息。我需要在几个列中删除带有0的条目(您的BMI或血压不能为0)我还需要删除所有带有NA的条目。

我被限制在做什么上。我已经尝试过na.omit函数,但是后言我尝试执行诸如mean()平均数()之类的操作,它给我的消息是“参数不是数字或逻辑:返回NA”,这没有任何意义。我以为应该删除NA。

请帮助。我需要帮助清理此数据。

3 个答案:

答案 0 :(得分:0)

通常,删除NA并不是一件好事,因为它可能是一列的NA,而不是另一列的NA,因此您可能排除了错误的内容。

通过统计信息库,您可以使用complete.cases(df)删除所有不适用。

要将0更改为NA,您可以执行以下操作:

df[ df == 0] <- NA

此外,如果您想在计算时忽略NA则可以

median(df$col,na.rm = TRUE)

这将从计算中删除NA,您将不会获得NA作为输出。

答案 1 :(得分:0)

tidyverse解决方案可能看起来像这样。 Tidyverse是R Studio团队开发的一组软件包。

library(tidyverse)

data <- data %>%
  filter(BMI != 0, BloodPressure != 0, col != NA)

答案 2 :(得分:0)

首先,必须确保您感兴趣的列是numeric而不是character,因为从excel文件直接导入可能会产生意外的列类型。为此,请使用函数class(data_name$column_name)

字符变量不能用mean()median()处理,因此必须先使用

将它们转换为numeric
data_name$column_name <- as.numeric(data_name$column_name)

之后,您可以使用NA函数将ifelse替换为零:

data_name$column_name <- ifelse(data_name$column_name == 0, NA, data_name$column_name)

然后,您可以使用参数na.rm以正常方式计算平均值和中位数,以删除缺失值(NA):

mean_BMI <- mean(data_name$BMI, na.rm = TRUE)