在具有匹配元素名称的列表中快速查找 data.frame 的值
Quickly find value from data.frame in list with matching element names
我有一个包含 x 个命名元素的列表,每个元素包含一系列数字。
我还有一个包含 2 列的 data.frame:
- 第 1 列:与列表元素匹配的名称(尽管不按顺序)
- 第 2 列:数字向量
我想快速确定我的 data.frame 的每一行的值在列表中的位置,因为列表元素等于 data.frame 中每个给定的 data.frame 行的值的名称列。
最终目标实际上是生成一个向量,其中包含我为 data.frame.
的每一行匹配的值之前的每个适当元素的列表值
我的数据有 200,000 行,所以我正在尝试优化这个过程。
例子
我有一个列表 data.frame:
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
所以首先我想知道每个值在列表中出现的位置(以便元素与 data.frame 中同一行中的名称相匹配):
where <- ????
>where
[1] 4 3 3 # 7 = 4th number in c, 3 = 3rd # in a, and 8 = 3rd # in b
但最终我希望输出显示我匹配的元素之前的元素中的值:
which <- ????
>which
[1] 6 2 7
要获得包含命名项的列表,您可以使用以下语法:
l1 <- list(a=a,b=b,c=c)
然后你可以使用mapply()
来测试每个项目:
mapply(function(n,v) which(l1[[n]]==v) , d1$name,d1$val)
[1] 4 3 3
然后再次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
我有一个包含 x 个命名元素的列表,每个元素包含一系列数字。
我还有一个包含 2 列的 data.frame:
- 第 1 列:与列表元素匹配的名称(尽管不按顺序)
- 第 2 列:数字向量
我想快速确定我的 data.frame 的每一行的值在列表中的位置,因为列表元素等于 data.frame 中每个给定的 data.frame 行的值的名称列。
最终目标实际上是生成一个向量,其中包含我为 data.frame.
的每一行匹配的值之前的每个适当元素的列表值我的数据有 200,000 行,所以我正在尝试优化这个过程。
例子
我有一个列表 data.frame:
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
所以首先我想知道每个值在列表中出现的位置(以便元素与 data.frame 中同一行中的名称相匹配):
where <- ????
>where
[1] 4 3 3 # 7 = 4th number in c, 3 = 3rd # in a, and 8 = 3rd # in b
但最终我希望输出显示我匹配的元素之前的元素中的值:
which <- ????
>which
[1] 6 2 7
要获得包含命名项的列表,您可以使用以下语法:
l1 <- list(a=a,b=b,c=c)
然后你可以使用mapply()
来测试每个项目:
mapply(function(n,v) which(l1[[n]]==v) , d1$name,d1$val)
[1] 4 3 3
然后再次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