【发布时间】:2021-02-13 19:08:13
【问题描述】:
我正在尝试使用 R 从 .csv 文件中删除“不可用”。我已经想出了如何缩小文件范围并排列数据,但未删除“不可用”。我尝试过使用 complete.cases、na.omit 和 lapply,但它们都不起作用。对此的任何帮助将不胜感激。请参阅下面的作业:
"编写一个名为 best 的函数,它有两个参数:一个状态的 2 字符缩写名称和一个 结果名称。该函数读取 result-of-care-measures.csv 文件并返回一个字符向量 指定结果的 30 天死亡率最高(即最低)的医院的名称 在那个状态。医院名称是 Hospital.Name 变量中提供的名称。结果可以 是“心脏病发作”、“心力衰竭”或“肺炎”之一。没有特定数据的医院 在决定排名时应将结果从医院集合中排除"
best <- function(state, outcome)
{
chart <- read.csv("outcome-of-care-measures.csv", colClasses = "character")
if (!any(state == chart$State)){
stop("invalid state")
} else if(!outcome %in% c("heart attack" , "heart failure" , "pneumonia")){
stop("invalid outcome")
} else {
keys <- c("heart attack" = 11, "heart failure" = 17, "pneumonia" = 23)
outcomeKey <- keys[outcome]
}
dataByState <- split(chart, chart$State)
outcomeState <- dataByState[[state]]
outcomeStateOrder <- na.omit(arrange(outcomeState, desc(outcomeState[,outcomeKey]),Hospital.Name))
goodData <- outcomeStateOrder[complete.cases(outcomeStateOrder) , ]
View(goodData)
}
best("TX", "heart attack")
【问题讨论】:
-
字符串“Not Available”不能识别R中的缺失值。缺失值由
NA指定。阅读?read.csv的手册页,并特别注意na.strings=参数。 -
这是我的想法,但我不确定。然后我需要使用 for 和 if 循环来删除这些行吗?
-
没有。使用
complete.cases()函数。它返回一个逻辑向量,如果没有缺失值,则返回 TRUE,如果有,则返回 FALSE。使用它仅从您的数据中提取完整的案例。