这里是新手,如果/在任何时候我听起来像个白痴,我都深表歉意。
我正在RStudio工作。我已经从excel导入了数据文件。它有几列带有健康信息的列,例如年龄,血压,BMI和其他一些信息。我需要在几个列中删除带有0的条目(您的BMI或血压不能为0)我还需要删除所有带有NA的条目。
我被限制在做什么上。我已经尝试过na.omit函数,但是后言我尝试执行诸如mean()平均数()之类的操作,它给我的消息是“参数不是数字或逻辑:返回NA”,这没有任何意义。我以为应该删除NA。
请帮助。我需要帮助清理此数据。
答案 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)