使用$ variable通过函数的变量进行子集化

时间:2014-01-24 23:13:29

标签: r function subset

我无法使用我的函数变量从列表中进行子集化。

rankhospital <- function(state,outcome,num = "best") {

#code here

e3<-dataframe(...,state.name,...)


if (num=="worst"){ return(worst(state,outcome))
}else if((num%in%b=="TRUE" & outcome=="heart attack")=="TRUE"){
 sep<-split(e3,e3$state.name)
 hosp.estado<-sep$state
 hospital<-hosp.estado[num,1]
 return(as.character(hospital))

我按状态分割数据框(这是我函数的变量) 但是hosp.estado<-sep$state不起作用。我也试过as.data.frame.

该功能(rankhospital(“NY”....)返回一个字符(0)。

当我直接在代码中使用sep $“NY”提供sep $状态时,它完美地工作,所以我猜问题是我不能使用函数的变量来执行此操作。我对吗?我可以用什么呢?

谢谢!

3 个答案:

答案 0 :(得分:1)

如果state是您函数中的变量,则可以使用statesep[state]引用sep[[state]]给出的名称列。第一个生成一个数据框,其中一列基于state的值命名。第二个产生一个未命名的向量。

df=data.frame(NY=rnorm(10),CA=rnorm(10), IL=rnorm(10))
state="NY"
df[state]
#             NY
# 1  -0.79533912
# 2  -0.05487747
# 3   0.25014132
# 4   0.61824329
# 5  -0.17262350
# 6  -2.22390027
# 7  -1.26361438
# 8   0.35872890
# 9  -0.01104548
# 10 -0.94064916
df[[state]]
#  [1] -0.79533912 -0.05487747  0.25014132  0.61824329 -0.17262350 -2.22390027 -1.26361438  0.35872890 -0.01104548 -0.94064916

class(df[state])
# [1] "data.frame"

class(df[[state]])
# [1] "numeric"

答案 1 :(得分:0)

好像你正试图让一个州的顶级医院。您不希望split在这里(请参阅sep的结果来了解我的意思)。相反,使用:

as.character(e3[e3$state.name==state, 1][num])

这有希望做你想要的。

答案 2 :(得分:0)

您需要sep[[state]]而不是sep$state才能从sep list中获取与您的函数的state参数匹配的数据框。像这样:

e3 <- read.csv("https://raw.github.com/Hindol/data-analysis-coursera/master/HW3/hospital-data.csv")

state <- "WY"
num <- 1:5

sep<-split(e3,e3$State)
hosp.estado<-sep[[state]]
hospital<-hosp.estado[num,1]
as.character(hospital)
# [1] "530002" "530006" "530008" "530010" "530011"