2017-07-11 53 views
-1

我在這裏遇到了一個大問題,我真的很感謝一些幫助。基本上我有一個大的數據框,看起來像這樣。請注意所有此R代碼在終端而不是R STUDIO!在數據框的特定位置內計算離羣值? [複雜]

![據幀] http://imgur.com/a/ftUZ5

我試圖做的是通過獨特的val_lvl2處理單獨數據幀。

下面是代碼,正是我想要做的,但規模更大。

功能代碼:

remove_outliers <- function(x, na.rm = TRUE, ...) { 
    qnt <- quantile(x, probs=c(.25, .75), na.rm = na.rm, ...) 
    H <- 1.5 * IQR(x, na.rm = na.rm) 
    y <- x 
    y[x < (qnt[1] - H)] <- NA 
    y[x > (qnt[2] + H)] <- NA 
    y 

} 

CODE:

holder1 <- subset(z_combined_cost_dtrmnt, val_lvl2 == "Hammer Toe Repair") 

holder1 <- holder1[!(holder1$episode_count <=3),] 

holder1$prd_num_of_days_num <- remove_outliers(holder1$prd_num_of_days_num) 

這將刪除所有的異常長度在val_lvl2錘狀趾修理這是我想要的東西。但是,我不想每次都這樣做,因爲有很多獨特的治療方法!刪除所有異常值後,我還需要刪除NA列並將所有數據合併回到一個數據框「z_combined_cost_dtrmnt」,該數據框現在應該具有唯一的所有異常長度,以便val_lvl2中的每個獨特處理。在這一點上,上面的代碼就像我已經去除異常值一樣,所以幫助將不勝感激,因爲我是積極的有一個更有效的方法來做到這一點,然後寫出每個治療代碼!

這裏是val_lvl2每一個獨特的治療效果:![獨特值] http://imgur.com/237OqCs

回答

0

您可以使用split,創建一個由val_lvl2級數據幀列表...

holders <- split(z_combined_cost_dtrmnt, z_combined_cost_dtrmnt$val_lvl2) 

,然後申請無論您想要使用lapply的列表中的每個元素的任何函數,例如

holders <- lapply(holders, function(x) x[!x$episode_count <= 3,]) 
holders <- lapply(holders, function(x){ 
        x$prd_num_of_days_num <- remove_outliers(x$prd_num_of_days_num) 
        return(x) }) 

您將結束與dataframes的一個列表,其中的val_lvl2每個級別。

+0

我不知道那是一個命令!謝謝!事後就像合併(持有人)一樣簡單? – nazgulian

+0

這正是我正在尋找的!非常感謝!!對任何遇到類似問題的人來說,把數據帶回一個大集合是非常簡單的!只需使用do.call函數即可。 對我來說,它看起來像這樣。 z_combined_cost_dtrmnt < - do.call(rbind,持有者) – nazgulian