我有一个包含800万个元素的向量,其外观如下:
slowQuery
我还有一个长度为1421的列表列表,其中第三列是全零列。我想将向量分布在列表列表的第三列上,这样800万个元素分布在列表列表的第三列上。因此,对每个嵌套列表的行数求和应该可以得出初始向量的长度(超过800万)。
我已经显示了列表列表的外观,在这里我想用向量中的值填充列表中的“ c”:
@Transactional(timeout = 10)
我目前所想到的方法是将每个元素的行存储在列表列表中,并使用该行确定向量的多少元素应进入相应的子列表。有更快的方法吗?
答案 0 :(得分:2)
如果您有类似的东西:
lofl <- rep(list(data.frame(a=1:3,b=2:4,c=0)), 2)
lofl
#[[1]]
# a b c
#1 1 2 0
#2 2 3 0
#3 3 4 0
#
#[[2]]
# a b c
#1 1 2 0
#2 2 3 0
#3 3 4 0
vec <- 1:6
那么您可以做:
Map(
replace,
lofl,
"c",
split(vec, rep(seq_along(lofl), sapply(lofl,nrow)))
)
#[[1]]
# a b c
#1 1 2 1
#2 2 3 2
#3 3 4 3
#
#[[2]]
# a b c
#1 1 2 4
#2 2 3 5
#3 3 4 6
此split
将您的vec
分成适合列表列表各部分的块(此处为lofl
),然后使用Map
进行循环lofl
和replace
变量的每个部分都有必要的块。
如果每个列表中都有多个列表,并且只想将值分布在每个列表的第一部分,则可以在进行一些子设置后使用类似的逻辑:
"c"