【发布时间】:2023-03-13 02:29:01
【问题描述】:
我正在重做一项学习作业,看看我是否可以改进它并重新开始。任务是编写一个函数,给定 2 个变量“state”和“outcome”,返回给定结果/疾病死亡率最低的州医院名称。 由于某种原因,我的 filter(!is.na()) 行似乎不起作用。我感觉这与我使用粘贴来选择列名这一事实有关,但在我的测试中这似乎并不重要。
代码如下:
library(dplyr)
data <- read.csv("outcome-of-care-measures.csv", colClasses = "character")
dataSelected <- data %>%
select("Hospital.Name", "State", "Hospital.30.Day.Death..Mortality..Rates.from.Heart.Attack", "Hospital.30.Day.Death..Mortality..Rates.from.Heart.Failure", "Hospital.30.Day.Death..Mortality..Rates.from.Pneumonia")
colnames(dataSelected) <- c("HostpitalName","State","DeathRateHeartAttack","DeathRateHeartFailure","DeathRatePneumonia")
dataSelected[,3] <- as.numeric(dataSelected[,3])
dataSelected[,4] <- as.numeric(dataSelected[,4])
dataSelected[,5] <- as.numeric(dataSelected[,5])
best <- function(state,outcome){
column <- paste('DeathRate',outcome, sep = "")
if (state %in% dataSelected$State < 1){
return('Invalid state')
} else if (column %in% colnames(dataSelected) < 1){
return('Invalid outcome')
} else{
BestHospitals <- dataSelected %>%
select(HostpitalName,State,column) %>%
filter(!is.na(column)) %>%
filter(State == state) %>%
arrange(column,HostpitalName)
return(BestHospitals[1,1])
}
}
我的函数调用
best("AL","HeartAttack")
版本信息
平台 x86_64-apple-darwin15.6.0
拱 x86_64
操作系统 darwin15.6.0
系统 x86_64、darwin15.6.0
状态
专业 3
次要 6.1
2019 年
07月
第 5 天
svn 版本 76782
语言 R
version.string R 版本 3.6.1 (2019-07-05)
昵称 脚趾动作
dput(head(dataSelected)) 的输出:
structure(list(HostpitalName = c("SOUTHEAST ALABAMA MEDICAL CENTER",
"MARSHALL MEDICAL CENTER SOUTH", "ELIZA COFFEE MEMORIAL HOSPITAL",
"MIZELL MEMORIAL HOSPITAL", "CRENSHAW COMMUNITY HOSPITAL", "MARSHALL MEDICAL CENTER NORTH"
), State = c("AL", "AL", "AL", "AL", "AL", "AL"), DeathRateHeartAttack = c(14.3,
18.5, 18.1, NA, NA, NA), DeathRateHeartFailure = c(11.4, 15.2,
11.3, 13.6, 13.8, 12.5), DeathRatePneumonia = c(10.9, 13.9, 13.4,
14.9, 15.8, 8.7)), row.names = c(NA, 6L), class = "data.frame")
【问题讨论】:
-
欢迎来到 SO!我们确实需要查看(部分)您的数据。请将
dput(dataSelected)(或dput(head(dataSelected)))的输出添加到您的问题中,以及您对best函数的实际调用。两个建议:您确定您的数据包含NA而不是字符"NA"?您不能将列名作为字符串传递给dplyr动词。您需要注意非标准评估 或NSE。 -
感谢您的快速回答!我已经添加了你的建议。可以看出:数据确实包含实际的 NA。我实际上相当确定您的第二个建议(将字符串作为列名传递)是问题所在。但是,如何优雅地解决将“结果”参数转换为列名的问题,以便可以将其与 dplyr 一起使用?