Re: [問題] 想用R篩選出每一欄都有值的筆數
※ 引述《menghsuanliu (庫庫少)》之銘言:
: [問題類型]
: 程式諮詢(我想用R 做某件事情,但是我不知道要怎麼用R)
: [軟體熟悉度]:
: 入門(寫過其他程式,只是對語法不熟悉)
: [問題敘述]:
: 我有一個data frame 有160筆資料,有100個欄位,有些有值,有些值是0(這些值都是數
: 字型熊)
: 我想找出那些100個欄位都有值(>0)的筆數,我想對這些都有值的筆數進行其他的分析
: 請問有什么方式可以快速挑出符合我需求的資料?
: [程式範例]:
: [環境敘述]:
: [關鍵字]:
data.table的作法滿tricky的,看你要不要學
我是覺得apply效率沒差太多之下,兩個隨便用都可以
library(data.table)
library(pipeR)
# data generation
numRows <- 1e5L
DT <- data.table(
matrix(rnorm(numRows * 100), numRows),
matrix(sample(LETTERS, numRows * 10, TRUE), numRows)
) %>>% setnames(paste0("V", 1L:110L))
for (i in 1L:100L) {
locNA <- sample(nrow(DT), 100L)
set(DT, locNA, i, NA)
locZero <- sample(which(!is.na(DT[[i]])), 100L)
set(DT, locZero, i, NA)
}
# check
DT[ , lapply(.SD, function(x) sum(is.na(x) | x == 0)), .SDcols = V1:V100]
# V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11 V12 V13 V14 V15 V16 V17 V18 ...
# 1: 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 ...
# method 1
system.time({
numericColNames <- colnames(DT)[which(sapply(DT, is.numeric))]
expr <- paste0(paste0(paste0("is.na(", numericColNames, ")"),
collapse = "|"), "|",
paste0(paste0(numericColNames, "==0"), collapse = "|"))
DT2 <- DT[ , removeCol := eval(parse(text = expr))] %>>%
`[`(removeCol == FALSE) %>>% `[`(j = removeCol := NULL)
})
# user system elapsed
# 0.12 0.03 0.15
# method 2
system.time({
numericColNames <- colnames(DT)[which(sapply(DT, is.numeric))]
expr <- paste0(paste0(paste0(numericColNames, "==0"), collapse = "|"))
DT2 <- DT[ , removeCol := eval(parse(text = expr))] %>>% na.omit %>>%
`[`(removeCol == FALSE) %>>% `[`(j = removeCol := NULL)
})
# user system elapsed
# 0.16 0.09 0.14
# method 3
DT[ , removeCol := NULL]
system.time({
removeIdx <- DT[ , numericColNames, with = FALSE] %>>% as.matrix %>>%
apply(1, function(x) !is.na(all(x | x != 0)))
DT3 <- DT[removeIdx, ]
})
# user system elapsed
# 0.67 0.03 0.70
all.equal(DT2, DT3) # TRUE
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 118.170.36.131
※ 文章網址: https://www.ptt.cc/bbs/R_Language/M.1483686942.A.D86.html
推
01/06 16:09, , 1F
01/06 16:09, 1F
討論串 (同標題文章)
R_Language 近期熱門文章
PTT數位生活區 即時熱門文章