第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在data.table中按引用刪除行?

如何在data.table中按引用刪除行?

揚帆大魚 2019-07-26 11:47:26
如何在data.table中按引用刪除行?我的問題與引用分配和復(fù)制分配有關(guān)data.table。我想知道是否可以通過引用刪除行,類似于DT[ , someCol := NULL]我想知道DT[someRow := NULL, ]我想有一個很好的理由說明為什么這個功能不存在,所以也許你可以指出一個很好的替代通常的復(fù)制方法,如下所示。特別是,從我的例子(data.table)開始,DT = data.table(x = rep(c("a", "b", "c"), each = 3), y = c(1, 3, 6), v = 1:9)#      x y v# [1,] a 1 1# [2,] a 3 2# [3,] a 6 3# [4,] b 1 4# [5,] b 3 5# [6,] b 6 6# [7,] c 1 7# [8,] c 3 8# [9,] c 6 9假設(shè)我想從此data.table中刪除第一行。我知道我可以這樣做:DT <- DT[-1, ]但通常我們可能想要避免這種情況,因為我們正在復(fù)制對象(這需要大約3 * N內(nèi)存,如果是N object.size(DT),如此處所指出的那樣?,F(xiàn)在我發(fā)現(xiàn)set(DT, i, j, value)。我知道如何設(shè)置特定值(如下所示:set all第1行和第2行以及第2列和第3列的值為零)set(DT, 1:2, 2:3, 0) DT#      x y v# [1,] a 0 0# [2,] a 0 0# [3,] a 6 3# [4,] b 1 4# [5,] b 3 5# [6,] b 6 6# [7,] c 1 7# [8,] c 3 8# [9,] c 6 9但是,如何刪除前兩行呢?干set(DT, 1:2, 1:3, NULL)將整個DT設(shè)置為NULL。我的SQL知識非常有限,所以你們告訴我:給定的data.table使用SQL技術(shù),是否有與SQL命令相同的功能DELETE FROM table_nameWHERE some_column=some_value在data.table?
查看完整描述

3 回答

?
慕容3067478

TA貢獻1773條經(jīng)驗 獲得超3個贊

我為使內(nèi)存使用而采取的方法類似于就地刪除是一次對列進行子集并刪除。沒有正確的C memmove解決方案快,但內(nèi)存使用是我在這里所關(guān)心的。這樣的事情:

DT = data.table(col1 = 1:1e6)cols = paste0('col', 2:100)for (col in cols){ DT[, (col) := 1:1e6] }keep.idxs = sample(1e6, 9e5, FALSE) # keep 90% of entriesDT.subset = data.table(col1 = DT[['col1']][keep.idxs]) # this is the subsetted tablefor (col in cols){
  DT.subset[, (col) := DT[[col]][keep.idxs]]
  DT[, (col) := NULL] #delete}


查看完整回答
反對 回復(fù) 2019-07-26
?
千巷貓影

TA貢獻1829條經(jīng)驗 獲得超7個贊

這是一個基于@ vc273的答案和@Frank的反饋的工作函數(shù)。

delete <- function(DT, del.idxs) {           # pls note 'del.idxs' vs. 'keep.idxs'
  keep.idxs <- setdiff(DT[, .I], del.idxs);  # select row indexes to keep
  cols = names(DT);
  DT.subset <- data.table(DT[[1]][keep.idxs]); # this is the subsetted table
  setnames(DT.subset, cols[1]);
  for (col in cols[2:length(cols)]) {
    DT.subset[, (col) := DT[[col]][keep.idxs]];
    DT[, (col) := NULL];  # delete
  }
   return(DT.subset);}

其用法示例:

dat <- delete(dat,del.idxs)   ## Pls note 'del.idxs' instead of 'keep.idxs'

其中“dat”是data.table。從我的筆記本電腦上刪除1.4M行中的14k行需要0.25秒。

> dim(dat)[1] 1419393      25> system.time(dat <- delete(dat,del.idxs))
   user  system elapsed 
   0.23    0.02    0.25 > dim(dat)[1] 1404715      25>

PS。由于我是SO的新手,我無法在@ vc273的帖子中添加評論:-(


查看完整回答
反對 回復(fù) 2019-07-26
  • 3 回答
  • 0 關(guān)注
  • 851 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號