gpt4 book ai didi

r - data.table 中从列名字符串向量生成多列的最佳方法

转载 作者:行者123 更新时间:2023-12-04 00:17:04 24 4
gpt4 key购买 nike

我目前正在试验 data.table 并寻找做事的“最佳”方式。

在下面的示例中,我想做的是有一个包含列名的字符串,为正常增量附加“.d”,为百分比增量附加“.dP”。 (请记住,字符串中的列只是一个子集,而不是完整的 data.table,即使我的示例仅限于这些。)

我希望代码尽可能紧凑和快速,同时充分利用 R 和 data.table 的优势。

目前我想到的解决方案是这样的:

percentDelta<-function(newvalue,basevalue){
return((newvalue-basevalue)/basevalue)
}

normalDelta<-function(newvalue,basevalue){
return(newvalue-basevalue)
}

DT = data.table(price=c(2,3,4,5,6,7,8), otherMetric=c(3,4,5,1,3,4,5))
deltaColsNames = c("otherMetric")
deltaColsNewNames <- paste0(deltaColsNames,'.d')
percentColsNewNames <- paste0(deltaColsNames,'.dP')

DT[,eval(deltaColsNewNames) := lapply(DT[,eval(deltaColsNames),with=F],normalDelta,price)]
DT[,eval(percentColsNewNames) := lapply(DT[,eval(deltaColsNames),with=F],percentDelta,price)]

我不太确定生成多列的 data.table 调用是否正确?将“lapply”与“eval”一起使用是解决此问题的方式吗?

编辑:我应该避免使用“with=F”吗?

DT[,eval(deltaColsNewNames) := lapply(DT[,which(names(DT) %in% deltaColsNames)],normalDelta,price)]
DT[,eval(percentColsNewNames) := lapply(DT[,which(names(DT) %in% deltaColsNames)],percentDelta,price)]

最佳答案

问题 #495现在用 this recent commit 解决了,我们现在可以做到这一点:

require(data.table) # v1.9.7+
DT[, (deltaColsNewNames) := lapply(.SD, normalDelta, price), .SDcols=deltaColsNames]

关于r - data.table 中从列名字符串向量生成多列的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32089594/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com