Re: [問題] 根據條件刪除資料

看板R_Language作者 (天)時間8年前 (2017/11/15 21:19), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串3/3 (看更多)
※ 引述《Whatfor (Live for what?)》之銘言: : 大家好, : 我是R的新手, : 下列問題若過於簡單請多包涵~~ : 目前有資料如下: : A B C D E F : 1 96 1 NA NA 3 : NA NA NA NA 96 NA : 1 0 1 0 1 2 : A~F是欄位名稱, : 我想把只要A~F中有96者的紀錄整筆刪除, : 指令下這樣: : d<-data[!(A==96|B==96|C==96|D==96|E==96),] : 可是跑不出正確的筆數, : 想請問這樣寫是否哪邊要更正? : 或有其他寫法, : 謝謝大家~ 讀入資料: library(data.table) DT <- fread("A B C D E F 1 96 1 NA NA 3 NA NA NA NA 96 NA 1 0 1 0 1 96 ") # 一般解法: DF <- copy(DT) setDF(DF) idx <- Reduce(`&`, lapply(names(DF)[1:5], function(c) DF[[c]] != 96)) DF[idx, ] # A B C D E F # 3 1 0 1 0 1 96 # dplyr 解法 library(dplyr) tbl <- tbl_df(DT) filter_(tbl, .dots = paste0(LETTERS[1:5], "!='", 96, "'")) # # A tibble: 1 x 6 # A B C D E F # <int> <int> <int> <int> <int> <int> # 1 1 0 1 0 1 96 # data.table解法 DT[ , removeRow := Reduce(`|`, lapply(.SD, `==`, 96)), .SDcols = names(DT)[1:5]] DT2 <- DT[removeRow == FALSE][ , removeRow := NULL] # A B C D E F # 1: 1 0 1 0 1 2 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 118.170.55.84 ※ 文章網址: https://www.ptt.cc/bbs/R_Language/M.1510751995.A.C6A.html
文章代碼(AID): #1Q33xxng (R_Language)
討論串 (同標題文章)
文章代碼(AID): #1Q33xxng (R_Language)