我有一个包含多个列的数据框,其中包含按位置划分的不同区域。在另一列中,我有一个密度值。我想知道如何创建一个新表(最好通过循环),每个区域乘以密度。我的数据框如下所示:
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?但无法找到一种方法来使其适应我的数据。非常感谢:)
如果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')