【发布时间】:2021-06-16 22:16:17
【问题描述】:
我有一个这样的转换后的 data.table:
name <- c("Bob","Mary","Jane","Kim")
weight <- c(60,65,45,55)
height <- c(170,165,140,135)
dft <- data.table(name,weight,height)
dft <- data.table (dft[,.(name)] , dft[, weight %*% t(weight)])
names(dft) <- c("name", str_c("tau",1:4))
现在我首先将tau12 = tau1 * tau2 相乘并计算所有五列的行总和,包括tau12。
如果我使用
dft[, `:=`(tau12 = tau1 * tau2,
sum1 = lapply(.SD, sum) ) , .SDcols = patterns("^tau") ]
但是,sum1 仅计算四列的总和,不包括 tau12 列。
我想知道在这种情况下如何计算总和 tau1+tau2+tau3+tau4+tau12?这与dplyr::mutate的做法不同,新生成的变量可以参与后续操作。
【问题讨论】:
-
您可以在匿名正文 (
{...}) 中引用新创建的变量。参见例如this answer -
我想出了另一种方法。对于那些临时的新变量,将
=替换为<-。 -
是的,这也是一种可能 (How can I evaluate (or create) an on the fly column in data.table in r)。不过,对于更复杂的表达式,我倾向于使用
{...};)
标签: r dplyr data.table tidyverse