在 data.tables 上传播值
Spreading values on data.tables
我是 R 的新手,我想知道是否有用于传播的库,我的意思是,例如,如果我有这个 data.table:
DT <- data.table(V1 = c(1L,2L), V2 = LETTERS[1:4], V4 = 1:4)
我将 15 分配给 V4
列:
DT$V4 = 15
将调整这些值,使总和现在为 15:
DT <- data.table(V1 = c(1L,2L), V2 = LETTERS[1:4], V4 = c(1.5,3,4.5,6)).
(新值是乘以 15/sum(column) --> 15 / 10)
这是我必须做的最简单的例子,这就是我问是否有图书馆的原因。
您可以使用下面的方法计算要乘以的数15/10=1.5
,然后乘以.I
DT <- data.table(V1 = c(1L,2L), V2 = LETTERS[1:4], V4 = 1:4)
DT$V4 = 15
DT[,V4:=.I*V4/sum(seq(.N))]
DT
# V1 V2 V4
# 1: 1 A 1.5
# 2: 2 B 3.0
# 3: 1 C 4.5
# 4: 2 D 6.0
我是 R 的新手,我想知道是否有用于传播的库,我的意思是,例如,如果我有这个 data.table:
DT <- data.table(V1 = c(1L,2L), V2 = LETTERS[1:4], V4 = 1:4)
我将 15 分配给 V4
列:
DT$V4 = 15
将调整这些值,使总和现在为 15:
DT <- data.table(V1 = c(1L,2L), V2 = LETTERS[1:4], V4 = c(1.5,3,4.5,6)).
(新值是乘以 15/sum(column) --> 15 / 10)
这是我必须做的最简单的例子,这就是我问是否有图书馆的原因。
您可以使用下面的方法计算要乘以的数15/10=1.5
,然后乘以.I
DT <- data.table(V1 = c(1L,2L), V2 = LETTERS[1:4], V4 = 1:4)
DT$V4 = 15
DT[,V4:=.I*V4/sum(seq(.N))]
DT
# V1 V2 V4
# 1: 1 A 1.5
# 2: 2 B 3.0
# 3: 1 C 4.5
# 4: 2 D 6.0