将向量分布到R中列表列表中的一列上

时间:2018-12-18 05:51:00

标签: r list

我有一个包含800万个元素的向量,其外观如下:

slowQuery

我还有一个长度为1421的列表列表,其中第三列是全零列。我想将向量分布在列表列表的第三列上,这样800万个元素分布在列表列表的第三列上。因此,对每个嵌套列表的行数求和应该可以得出初始向量的长度(超过800万)。

我已经显示了列表列表的外观,在这里我想用向量中的值填充列表中的“ c”:

@Transactional(timeout = 10)

我目前所想到的方法是将每个元素的行存储在列表列表中,并使用该行确定向量的多少元素应进入相应的子列表。有更快的方法吗?

1 个答案:

答案 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进行循环loflreplace变量的每个部分都有必要的块。

如果每个列表中都有多个列表,并且只想将值分布在每个列表的第一部分,则可以在进行一些子设置后使用类似的逻辑:

"c"