【发布时间】:2015-09-29 16:21:10
【问题描述】:
我想根据另一个数据表的外部值更新数据表的某些指定列中的值。
我知道如何逐个变量地处理这个变量,但我想要一个更有效的解决方案,我可以自动化,也许使用lapply
更新:我的数据集(相当于下面示例中的mtcars)还有其他我不想更新的列。
对于一个可重现的示例,首先运行这个 sn-p 代码
# Load library
library(data.table)
# load data
data(mtcars)
# create another Data Table which we'll use as external reference
# this table shows the number of decimals of those variables we want to modify in mtcars
var <- c("mpg","disp","hp")
Decimal <- c(1,3,2)
DT <- cbind.data.frame(var, Decimal)
# convert into data.table
setDT(DT)
setDT(mtcars)
我的代码,逐列更新
mtcars[, mpg := mpg / 10 ^ DT[var=="mpg", Decimal] ]
mtcars[, disp := disp / 10 ^ DT[var=="disp", Decimal] ]
mtcars[, hp := hp / 10 ^ DT[var=="hp", Decimal] ]
这段代码运行良好,并且给出了预期的结果。
期望的结果
mtcars 的第一行以前是这样的:
> mpg disp hp
> 1: 21.0 160 110
现在看起来像这样:
> mpg disp hp
> 1: 2.10 0.160 1.10
有没有使用function、lapply等更有效的解决方案?
【问题讨论】:
标签: r data.table lapply