2017-12-04 9 views
1

私はdplyrパッケージのアレンジ機能を使用していましたが、いくつかの記事を見ましたが、それらのすべてがグループ別の問題に関わり、手配してくれています。私のデータのいくつかの列を正しくソートするだけです。アレンジ()が値を無視するのはなぜですか? (グループでは使用しません)

私の問題をデータで再現できるかどうかわからないので、hereはそのデータへのリンクです。これは、ケア対策の結果と呼ばれるファイルです.csvは、病院のデータフレームおよびその他の健康関連変数です。私は、与えられた入力状態において3つの健康状態のうちの最低30日間死亡率を有する病院に戻すことになっている機能を最高に書いた。

私はデータを読み、このような関連する列をいつ読みたいのかの名前を割り当てます。

best<-function(ST, outcome){ 
    library(dyplr) 
    data<-read.csv("outcome-of-care-measures.csv", na.strings = "Not available", stringsAsFactors = FALSE) 
    outcomes<-c("heart attack"=11, "heart failure"=17, "pneumonia"=23) 

次に、入力健康状態の死亡率が最も低い病院を見つけるブランチが3つあります。私の最初のブランチはうまく機能し、機能していないブランチとは区別できません。下のブランチは、出力列が正しくソートされていないデータを返します。

if (outcome=="pneumonia"){ 
    rel_data<-data[, c(2,7,outcomes["pneumonia"])] 
    names(rel_data)<-c("hospital", "state", "outcome") 
    sorted<- arrange(rel_data, state, outcome, hospital) 
    state_sorted<-subset(sorted, state==ST) 
    print(state_sorted$hospital[1])}} 

私がベスト(「MD」、「肺炎」)と呼ぶと、それは最初のものではなく10番目の病院を返します。 1から9までの目印がこの柱の上部から切り取られ、柱の底に貼り付けられたように見えます。どんな考えが間違っているのでしょうか?私が「肺炎」の代わりに「心臓発作」を入力すると、その列はちょうど良いソートされているように見え、正しい出力が得られます。私は唯一の違いは "心臓発作"ではなく "肺炎"であることを100%確信しています。

+0

は私のために動作するようです。私は "CALVERT MEMORIAL HOSPITAL"を手に入れます。PSなぜ 's < - subset(rel_data、state == ST);を使わないのですか? [病院、病院、病院] –

+0

それは私があまりにも得ている、それは大きいバルティモア医療センターでなければなりません。あなたがstate_sortedを見て結果のcolを下回ると、インデックス10の周りの実際の最小値にジャンプするまで値が増加することがわかります。それは、列の上部が切り取られ、下部に取り付けられたようなものです。 – user3299824

+1

数字列に数値以外の値があるので、列全体が文字として読み込まれて文字としてソートされるため、 "10.1" <"2"(たとえば) –

答えて

1

ここには、tidyverseパッケージエコシステムを使用して、あなたが何をしているのかを示す関数があります。

getBestHospital <- function(data, state, outcome) { 

    # column numbers for health conditions 
    outcomes <- c("heart attack" = 11, "heart failure" = 17, "pneumonia" = 23) 

    # get name of column to sort by 
    sortCol <- colnames(data)[outcomes[outcome]] 

    # return top-ranked hospital for given state and outcome 
    data %>% 
    dplyr::filter(State == state) %>% 
    dplyr::arrange_(paste0("`", sortCol, "`")) %>% 
    .$`Hospital Name` %>% 
    head(1) 

} 

そして、ここでそれを呼び出す方法は次のとおりです。na = "Not Available"を使用すると、結果の列に非数値データを持っていることの問題を解決することを

library(tidyverse) 

d <- readr::read_csv("~/../Downloads/outcome-of-care-measures.csv", na = "Not Available") 

getBestHospital(d, "MD", "pneumonia") 

注意。

いくつかのサンプル出力:

> getBestHospital(d, "MD", "pneumonia") 
[1] "GREATER BALTIMORE MEDICAL CENTER" 
> getBestHospital(d, "CA", "heart attack") 
[1] "GLENDALE ADVENTIST MEDICAL CENTER" 
> getBestHospital(d, "FL", "heart failure") 
[1] "FLORIDA HOSPITAL HEARTLAND MEDICAL CENTER" 
+1

OP *がこれをやろうとしましたが、大文字と小文字が間違っています... –

+1

これは素晴らしいです、私はdyplrに精通していましたが、これらのパッケージは非常に役に立つと思われます。ご協力ありがとうございました! – user3299824

関連する問題