Как я могу фильтровать (dplyr) по одному и тому же набору данных дважды в цикле for? р - PullRequest
0 голосов
/ 14 сентября 2018

У меня есть набор данных, который выглядит следующим образом:

Hospital.Name State heart attack 1 SOUTHEAST ALABAMA MEDICAL CENTER AL 14.3 2 MARSHALL MEDICAL CENTER SOUTH AL 18.5 3 ELIZA COFFEE MEMORIAL HOSPITAL AL 18.1 4 MIZELL MEMORIAL HOSPITAL AL Not Available 5 CRENSHAW COMMUNITY HOSPITAL AL Not Available 6 MARSHALL MEDICAL CENTER NORTH AL Not Available 7 ST VINCENT'S EAST AL 17.7 8 DEKALB REGIONAL MEDICAL CENTER AL 18.0 9 SHELBY BAPTIST MEDICAL CENTER AL 15.9 10 CALLAHAN EYE FOUNDATION HOSPITAL AL Not Available 11 HELEN KELLER MEMORIAL HOSPITAL AL 19.6 12 DALE MEDICAL CENTER AL 17.3 13 CHEROKEE MEDICAL CENTER AL Not Available 14 BAPTIST MEDICAL CENTER SOUTH AL 17.8 15 JACKSON HOSPITAL & CLINIC INC AL 17.5 16 GEORGE H. LANIER MEMORIAL HOSPITAL AL 15.4 17 ELBA GENERAL HOSPITAL AL Not Available 18 EAST ALABAMA MEDICAL CENTER AND SNF AL 16.3 19 WEDOWEE HOSPITAL AL Not Available 20 UNIVERSITY OF ALABAMA HOSPITAL AL 15.0

Цель состоит в том, чтобы получить название больницы для данного ранга больницы по «сердечному приступу» для каждого штата,Например, здесь я пытаюсь получить название больницы с наименьшей оценкой (ранг = 1) в столбце сердечного приступа для каждого состояния во фрейме данных.

Это моя попытка:

stateVec <- unique(df$State)
outcome <- 'heart attack'
name <- c()
st <- c()
stateVec <- c()
rank <- 1
for (i in 1:length(stateVec)) {
    k <- stateVec[i]
    df1 <- dplyr::filter(df, State==k)
    rankVec <- unique(df[[outcome]])
    rankVec <- sort(rankVec[rankVec != 'Not Available'])
    key <- rankVec[rank]
    df1 <- dplyr::filter(df1, get(outcome, envir = as.environment(df))==key)
    df1 <- df1[order(df$Hospital.Name), , drop = F]
    d <- df1[1,]
    name <- d$Hospital.Name
    st <- k
    return(data.frame(st, name))
    }

Я получаю следующую ошибку:

Error in filter_impl(.data, quo) : Result must have length 98, not 4706

Я попытался воссоздать проблему с набором данных mtcars, и don 'та же ошибка.Любая помощь будет оценена :)

1 Ответ

0 голосов
/ 14 сентября 2018

Я думаю, это то, что вы ищете.

desired_rank <- 1
df %>% 
  filter(!is.na(heart.attack)) %>% 
  group_by(State) %>% 
  arrange(heart.attack) %>% 
  slice(desired_rank) %>% 
  ungroup()
  1. Удаляет значения NA для heart.attack;
  2. Затем группы по штатам;
  3. Затем сортирует по возрастанию heart.attack;
  4. Затем возвращается первая больница (таким образом, больница с наименьшим значением heart.attack).

Выходные данные - это фрейм данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...