Re: [問題] data.table取出符合條件的資料
幾種我知道的 subsetting的方法比較:
```
tmp <- list()
for(i in 1:100) tmp[[i]] <- iris
iris <- do.call(rbind, tmp)
iris1 <- iris
library(data.table)
iris2 <- data.table(iris)
setkey(iris2, "Sepal.Width")
library(dplyr)
library(microbenchmark)
microbenchmark(
iris[iris$Sepal.Width == 3.5,],
subset(iris, Sepal.Width == 3.5),
iris2[J(3.5)],
filter(iris, Sepal.Width == 3.5),
filter(iris2, Sepal.Width == 3.5)
)
```
我自己應該會選用 `filter(iris, Sepal.Width == 3.5)` 這種,
在我電腦上的測試結果比其他的方法快3倍
※ 引述《tokyo291 (工口工口)》之銘言:
: [問題類型]:
:
: 效能諮詢(我想讓R 跑更快)
: 想在data.table格式中,取出一些特別的資料
: 由於迴圈數很大,想縮短取出的時間
:
: [軟體熟悉度]:
: 使用者(已經有用R 做過不少作品)
: [問題敘述]:
: 在data.table格式的資料中,需要取出某行裡數字相同的整列
: 目前有試過一些寫法,不過時間都花蠻久的
: 有研究過data.table[] 中括號裡面的寫法,好像沒有辦法快速取出
: (在看package裡面還有一個setkey指令,不曉得對快速取出有沒有幫助)
: [程式範例]:
: 以下是我把我的問題簡化的例子
: x<-structure(list(A = c(5, 3.5, 3.25, 4.25, 1.5), B = c(4.25, 4,
: 4, 4.5, 4.5), C = c(4.5, 2.5, 4, 2.25, 3)), .Names = c("A", "B",
: "C"), class = "data.frame", row.names = c(NA, -5L))
: x1<-as.data.table(x)
: > x1
: A B C
: 1: 5.00 4.25 4.50
: 2: 3.50 4.00 2.50
: 3: 3.25 4.00 4.00
: 4: 4.25 4.50 2.25
: 5: 1.50 4.50 3.00
: 第一種我使用
: > subset(x1,B==4)
: A B C
: 1: 3.50 4 2.5
: 2: 3.25 4 4.0
: 第二種是
: > x1[c(x1[,2,with=F]==4)]
: A B C
: 1: 3.50 4 2.5
: 2: 3.25 4 4.0
: 這兩種都能達到我要的結果,但是時間卻花很久
: 我完整的code是
: for(i in 1:nrow(a)){
: b_1=unique(subset(x,V2==a[i])[,4:5,with=F])
: b_2=unique(x[c(x[,2,with=F]==a[i])][,4:5,with=F])
: b_3=unique(x[a[i]][,4:5,with=F])
: }
: nrow(a)大約都是幾萬的數字
: x是要取出的資料
: a[i]則是在每個迴圈在第二行要取出符合的條件
: b_1和b_2是我自己寫的結果對了但是時間要花很久
: b_3是之前試網路上的寫法速度很快但是結果卻是錯誤的
: 不曉得依照b_3這種類似的寫法
: 能不能寫出取出符合條件的列?
: [關鍵字]:
:
: data.table 快速 取出
:
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 118.166.162.249
※ 文章網址: http://www.ptt.cc/bbs/R_Language/M.1396540286.A.8FC.html
※ 編輯: Wush978 (118.166.162.249), 04/03/2014 23:51:36
→
04/03 23:55, , 1F
04/03 23:55, 1F
→
04/03 23:56, , 2F
04/03 23:56, 2F
推
04/04 00:04, , 3F
04/04 00:04, 3F
→
04/04 00:04, , 4F
04/04 00:04, 4F
→
04/04 00:21, , 5F
04/04 00:21, 5F
不好意思,上面推文的說明有點不清楚,在此澄清
上面測出來跑最快的filter是針對iris( data.frame )
而dplyr套件本身都支援data.table。
※ 編輯: Wush978 (118.166.162.249), 04/04/2014 00:22:47
推
04/04 01:22, , 6F
04/04 01:22, 6F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 4 篇):
R_Language 近期熱門文章
PTT數位生活區 即時熱門文章