使用匹配的元素名称从列表中的data.frame快速查找值

使用匹配的元素名称从列表中的data.frame快速查找值,r,list,dataframe,match,elements,R,List,Dataframe,Match,Elements,我有一个包含命名元素数量的列表,每个元素包含一系列数字 我还有一个data.frame,包含两列: column1:与列表元素的名称匹配的名称(尽管不按顺序排列) 第2列:数字向量 如果列表元素等于data.frame的name列中每个给定data.frame行的值,我想快速确定列表中data.frame每行的值的位置 最终目标实际上是生成一个向量,该向量包含我为data.frame的每一行匹配的值之前的每个适当元素的列表值 我的数据有200000行,所以我正在尝试优化这个过程 示例 我有

我有一个包含命名元素数量的列表,每个元素包含一系列数字

我还有一个data.frame,包含两列:

  • column1:与列表元素的名称匹配的名称(尽管不按顺序排列)
  • 第2列:数字向量
如果列表元素等于data.frame的name列中每个给定data.frame行的值,我想快速确定列表中data.frame每行的值的位置

最终目标实际上是生成一个向量,该向量包含我为data.frame的每一行匹配的值之前的每个适当元素的列表值

我的数据有200000行,所以我正在尝试优化这个过程


示例

我有一个列表和数据框:

a = 1:5; b = 6:10; c = 4:8; l1 <- list(a,b,c) # a list
d1 <- data.frame(name = c('c','a','b'), val = c(7,3,8)) #a data.frame

a=1:5;b=6:10;c=4:8;l1要获得包含命名项的列表,可以使用以下语法:

l1 <- list(a=a,b=b,c=c)
然后再次
mapply()
以获取值:

mapply(function(n,i) l1[[ n]][i] , d1$name,
    mapply(function(n,v) which(l1[[n]]==v)-1 , d1$name,d1$val))
[1] 6 2 7
mget(c(“a”、“b”、“c”)
也可以避免使用
a=a
语法。
l1 <- list(a=a,b=b,c=c)
mapply(function(n,v) which(l1[[n]]==v) , d1$name,d1$val)
[1] 4 3 3
mapply(function(n,i) l1[[ n]][i] , d1$name,
    mapply(function(n,v) which(l1[[n]]==v)-1 , d1$name,d1$val))
[1] 6 2 7