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

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

當(dāng)變量名存儲在字符向量中時,選擇/賦值到data.table

當(dāng)變量名存儲在字符向量中時,選擇/賦值到data.table

猛跑小豬 2019-06-26 13:22:20
當(dāng)變量名存儲在字符向量中時,選擇/賦值到data.table如何引用data.table如果變量名存儲在字符向量中?例如,這適用于data.frame:df <- data.frame(col1 = 1:3)colname <- "col1"df[colname] <- 4:6df#   col1# 1    4# 2    5# 3    6如何對data.table執(zhí)行相同的操作?:=符號?最明顯的是dt[ , list(colname)]不起作用(我也沒料到)。
查看完整描述

3 回答

?
萬千封印

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

兩種編程方式選擇變量:

  1. with = FALSE:

    DT = data.table(col1 = 1:3)colname = "col1"DT[, colname, with = FALSE] #    col1# 1:    1# 2:    2# 3:    3
  2. “點”(..)前綴:

    DT[, ..colname]    #    col1# 1:    1# 2:    2# 3:    3

關(guān)于“點”的進一步描述(..)符號,見1.10.2中的新特點(目前沒有在幫助文本中描述)。

指派若要變量,請將:=括號內(nèi):

DT[, (colname) := 4:6]    #    col1# 1:    4# 2:    5# 3:    6

后者稱為列。普朗克,因為您將整個列向量替換為引用。如果子集i在這里,它將以參考的方式簽署。親生(colname)是在2014年10月cran版1.9.4版中引入的速記。這是新聞項目:

使用with = FALSE帶著:=現(xiàn)在所有情況下都不推薦使用,因為將lhs包裝在:=使用括號已經(jīng)有一段時間了。

colVar = "col1"DT[, colVar := 1, with = FALSE]                 # deprecated, still works silentlyDT[, (colVar) := 1]                             # please change to thisDT[, c("col1", "col2") := 1]                    # no changeDT[, 2:4 := 1]                                  # no changeDT[, c("col1","col2") := list(sum(a), mean(b)]  # no changeDT[, `:=`(...), by = ...]                       # no change

另見細(xì)節(jié)分節(jié)?`:=`:

DT[i, (colnamevector) := value]# [...] The parens are enough to stop the LHS being a symbol

為了在評論中回答更多的問題,這里有一個方法(和往常一樣,有很多種方法):

DT[, colname := cumsum(get(colname)), with = FALSE]#    col1# 1:    4# 2:    9# 3:   15

或者,您可能會發(fā)現(xiàn)更容易讀、寫和調(diào)試eval a paste,類似于構(gòu)造要發(fā)送到服務(wù)器的動態(tài)SQL語句:

expr = paste0("DT[,",colname,":=cumsum(",colname,")]")expr# [1] "DT[,col1:=cumsum(col1)]"eval(parse(text=expr))#    col1# 1:    4# 2:   13# 3:   28

如果經(jīng)常這樣做,就可以定義一個助手函數(shù)。EVAL :

EVAL = function(...)eval(parse(text=paste0(...)),envir=parent.frame(2))EVAL("DT[,",colname,":=cumsum(",colname,")]")#    col1# 1:    4# 2:   17# 3:   45

現(xiàn)在data.table1.8.2自動優(yōu)化j為了提高效率,最好使用eval方法。這個get()在……里面j防止某些優(yōu)化,例如。

或者,有set()..低開銷,功能形式:=在這里會很好。看見?set.

set(DT, j = colname, value = cumsum(DT[[colname]]))DT#    col1# 1:    4# 2:   21# 3:   66


查看完整回答
反對 回復(fù) 2019-06-26
?
長風(fēng)秋雁

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

對于多列和應(yīng)用于列值的函數(shù)。

在更新函數(shù)的值時,rhs必須是一個列表對象,因此使用.SD帶著lapply會成功的。

下面的示例將整數(shù)列轉(zhuǎn)換為數(shù)字列。

a1 <- data.table(a=1:5, b=6:10, c1=letters[1:5])sapply(a1, class)  # show classes of columns#         a           b          c1 # "integer"   "integer" "character" # column name character vectornm <- c("a", "b")# Convert columns a and b to numeric typea1[, j = (nm) := lapply(.SD, as.numeric ), .SDcols = nm ]sapply(a1, class)#         a           b          c1 # "numeric"   "numeric" "character"


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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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