我有一个数据框,其中有几列包含按位置不同的区域。在另一栏中,我有一个密度值。我想知道如何创建一个新表(理想情况下通过循环),每个区域乘以密度。我的数据框架如下:
X Area1 Area2 Area3 Area4 Density
A 10.1 12 20 25 0.04
B 4.2 7.3 30 35 0.05
C 5.3 9.6 10 15 0.07
D 0.2 0.3 2 3 0.01
我在Multiply many columns by a specific other column in R with data.table?似乎有一个类似的问题,但无法找到一种方法来调整它以适应我的数据。非常感谢:))
答案 0 :(得分:1)
如果dt
是 data.table ,那么
dtcopy <- copy(dt)
dtcopy[, 2:5 := lapply(.SD, '*', Density), .SDcols = 2:5][]
给出以下结果:
> dtcopy X Area1 Area2 Area3 Area4 Density 1: A 0.404 0.480 0.80 1.00 0.04 2: B 0.210 0.365 1.50 1.75 0.05 3: C 0.371 0.672 0.70 1.05 0.07 4: D 0.002 0.003 0.02 0.03 0.01
虽然您的原始 data.table dt
仍未更改,因为您使用copy
- 函数制作副本:
> dt X Area1 Area2 Area3 Area4 Density 1: A 10.1 12.0 20 25 0.04 2: B 4.2 7.3 30 35 0.05 3: C 5.3 9.6 10 15 0.07 4: D 0.2 0.3 2 3 0.01
另请参阅Understanding exactly when a data.table is a reference to (vs a copy of) another data.table了解您需要使用copy
的原因。
使用过的数据:
library(data.table)
dt <- fread('X Area1 Area2 Area3 Area4 Density
A 10.1 12 20 25 0.04
B 4.2 7.3 30 35 0.05
C 5.3 9.6 10 15 0.07
D 0.2 0.3 2 3 0.01')