2014-01-24 5 views
0

У меня возникли проблемы с подмножеством из списка с использованием переменной моей функции.

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 ("Нью-Йорк" ....) возвращает мне символ (0).

Когда кормим Сентябрь $ состояния с разделительными $ "NY" непосредственно в коде она прекрасно работает, так что я думаю, проблема в том, что я не могу использовать переменную функцию, чтобы сделать это. Я прав? Что я могу использовать вместо этого?

Спасибо !!

+1

Try 'сен [ 'состояния']' – RoyalTS

+1

Кроме того, попробуйте 'SEP [[ 'состояние']]'. –

+0

Кроме того, ваше if-условие излишне сложно. 'num% in% b & result ==« сердечный приступ »будет делать то же самое. – RoyalTS

ответ

1

Если state является переменной в функции, вы можете обратиться к колонке с именем, заданным state с помощью: sep[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" 
0

Похоже, вы пытаетесь получить верхнюю больницу в состоянии. Вы не хотите здесь split (см. результат sep, чтобы посмотреть, что я имею в виду). Вместо этого используйте:

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

Это, надеюсь, делает то, что вы хотите.

0

Вам нужно sep[[state]] вместо sep$state, чтобы получить кадр данных из вашего seplist, который соответствует параметру вашей функции 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" 
Смежные вопросы