将特定列乘以多列

时间:2017-10-13 11:15:34

标签: r data.table

我有一个数据框,其中有几列包含按位置不同的区域。在另一栏中,我有一个密度值。我想知道如何创建一个新表(理想情况下通过循环),每个区域乘以密度。我的数据框架如下:

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?似乎有一个类似的问题,但无法找到一种方法来调整它以适应我的数据。非常感谢:))

1 个答案:

答案 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')