我有一個data.table
outcome
,它有一個名爲hospital
的列。和一個名爲state
的專欄。 outcome
已經排序。現在我想從每個state
中的第n個hospital
子集(如果沒有第N個然後返回該狀態的NA)。我嘗試用下面的方法解決它(由於這是一項家庭作業,我只是向第三個分支顯示了導致錯誤的原因)。如何基於條件從列表中對行進行子集合
rankall <- function(out, num = "best"){
outcome <- readdata(outcome = out) //returns a data.table sorted by rate
...
outcome <- lapply(outcome, function(x) ifelse(num <= nrow(x), x[num,], c(NA,NA)))
outcome <- rbindlist(outcome)
}
原來outcome
就像
> data
hospital state
1: NYU HOSPITALS CENTER NY
2: DOYLESTOWN HOSPITAL PA
3: AVERA HEART HOSPITAL OF SOUTH DAKOTA LLC SD
4: GLENDALE ADVENTIST MEDICAL CENTER CA
5: WATERBURY HOSPITAL CT
---
2716: DESERT SPRINGS HOSPITAL NV
2717: THREE RIVERS COMMUNITY HOSPITAL OR
2718: ROBERT WOOD JOHNSON UNIVERSITY HOSPITAL AT RAHWAY NJ
2719: LAREDO MEDICAL CENTER TX
2720: MEDICAL CENTER SOUTH ARKANSAS AR
與第一和第二支能產生正確的結果,這就好比
> head (data)
hospital state
1: NA AK
2: CRESTWOOD MEDICAL CENTER AL
3: ARKANSAS HEART HOSPITAL AR
4: MAYO CLINIC HOSPITAL AZ
5: GLENDALE ADVENTIST MEDICAL CENTER CA
6: ST MARYS HOSPITAL AND MEDICAL CENTER CO
> nrow(data)
[1] 54
然而,第三個條件就是無法做它的工作。其產生錯誤
Error in rbindlist(outcome) :
Item 1 of list input is not a data.frame, data.table or list
和調試後,我發現該條件後的結果是一樣的東西(這導致錯誤在最後一步)
$AK
[1] NA
$AL
$AL[[1]]
[1] "HIGHLANDS MEDICAL CENTER"
不同於前兩者是像...
> head(data,2)
$AK
hospital state
1: PROVIDENCE ALASKA MEDICAL CENTER AK
$AL
hospital state
1: CRESTWOOD MEDICAL CENTER AL
所以我想知道第三個分支有什麼問題。 任何人都可以幫助我,非常感謝!
順便說一句,我不知道我是否可以引用與他人同名的變量。例如,當我撥打readdata
時,我需要傳遞一個名爲outcome
的參數,它阻止我使用此名稱作爲rankall
函數的參數(我改爲使用out
)。我知道在JAVA this.outcome
將有所幫助,所以在R怎麼樣。
這是Coursera的轉讓,R編程過程所以要小心不要違反榮譽代碼,在你測試條件之前,如果你將它們轉換爲數字等價物,if(num ==「best」index == 1,if(num ==「worst」)index = nrow(x)'' else index = as.numeric(num)' – OdeToMyFiddle
對不起,我通過隱藏一些細節而改變了,現在可以嗎?謝謝你的幫助!順便說一句,你能解決我有關命名空間的最後一個問題嗎? – Tebyt
國家AK的NA可能可能表明這個partic ular疾病AK沒有醫院覆蓋它,您可以通過僅爲AK設置結果數據來驗證這一點。關於'命名'問題,默認情況下,參數在位置上是匹配的,所以在rankall函數中,'rankall(結果=結果,...「是完全有效的語句 – OdeToMyFiddle