在R的data.table中,人們可以通過把方括號放在一起,將多個操作連鎖起來,每個操作將能夠使用非標準的評價,例如,無論什么是連鎖中的當前轉換的列名 - 例如:
dt[, .
. (agg1=mean(var1)。 agg2=mean(var2)),
by=.(col1,/span>col2)
][/span>,
. (agg2=ceiling(agg2)。 agg3=agg2^2)
]
假設我想做一個操作,其中涉及到計算一些函式,這些函式會把一個data.frame作為輸入,我想把它放在一個data.table鏈中,取鏈中的current物件,同時在例如by條款中使用這些結果。在magrittr/dplyr鏈中,我可以使用.來參考被傳遞到管道中的物件并對其進行任意操作,但是在data.table中,鏈的作業方式是完全不同的。
例如,假設我有這個表,并且我想計算一個跨組的總數的百分比:
library(data.table)
dt = data. table(col1 = c(1。 1, 1。 2,2。 3),col2=10。 15)
dt[, . (agg1 = sum(col2)/sum(dt$col2))。 由=。 (col1)]。
col1 agg1
1: 1 0.44
2: 2 0.36
3: 3 0.20
在這個片段中,我參考了[內的完整物件名稱,以計算該列的總數為sum(dt$col2),這繞過了by部分。但是如果它是在一個鏈中,并且這些列是通過其他操作計算的,我就不能簡單地像這樣使用dt,因為那是一個外部變數(也就是說,它是在[范圍之外的環境層中被評估的)。
我怎樣才能在一個鏈內參考當前物件/表?明確地說,我問的不是如何進行這種特定的分組操作,而是關于訪問當前物件的一般方法,以便在任意函式中使用它。
uj5u.com熱心網友回復:
我們可以使用.SDcols或者直接使用.SD,然后用[[
dt[, 。 (agg1 = sum(col2)=/sum(dt$col2))。 由=。 (col1)][/span>,
.(agg1 = ceiling(. SD[["agg1"]]))]
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/306878.html
標籤:
