在R中的数据框中查找的有效方法

时间:2018-09-26 13:21:42

标签: r performance lookup

以狗,鱼和马为例也许对我来说是愚蠢的。 如果我有位置而不是位置,该索引是它们位于位置1、2和3或其他位置的位置,该怎么办?马1可以位于位置2和3

index    |Location 1|Location 2|Location 3|...                        
1        |Dog1      |Horse1    |Fish1   |
2        |Horse3    |Fish2     |Horse1  |
3        |Fish2     |Horse2    |Horse3  |
4        |Dog1      |Fish1     |Horse2  |
5        |...       |...       |...     |...

然后,我想快速查找我的data.frame并找到所有索引值。我希望构建一个有关位置1,位置2和位置3的字典。然后我可以键入locatio1 ['dog1']并获取位置1中dog1的所有索引值。

在python中,我将建立一个location1字典并具有

location1_dict = {dog1 : [1, 4], Horse3 : [2], Fish2 : [3]}

,与location2_dict相同,依此类推。

无论如何,在r中是否有一种有效的方法可以快速查找data.frame。想象一下我有10 ^ 6行

1 个答案:

答案 0 :(得分:0)

定义一个函数以获取索引值,然后将其lapply移至感兴趣的列。

locations <- function(x){
  y <- unique(x)
  sapply(y, grep, x, , ignore.case = TRUE, simplify = FALSE)
}

res <- lapply(df1[-1], locations)

str(res)
#List of 3
# $ Location.1:List of 3
#  ..$ Dog1  : int [1:2] 1 4
#  ..$ Horse3: int 2
#  ..$ Fish2 : int 3
# $ Location.2:List of 4
#  ..$ Horse1: int 1
#  ..$ Fish2 : int 2
#  ..$ Horse2: int 3
#  ..$ Fish1 : int 4
# $ Location.3:List of 4
#  ..$ Fish1 : int 1
#  ..$ Horse1: int 2
#  ..$ Horse3: int 3
#  ..$ Horse2: int 4

数据。

df1 <-
structure(list(index = c(1, 2, 3, 4), Location.1 = c("Dog1", 
"Horse3", "Fish2", "Dog1"), Location.2 = c("Horse1", "Fish2", 
"Horse2", "Fish1"), Location.3 = c("Fish1", "Horse1", "Horse3", 
"Horse2")), row.names = c(NA, -4L), class = "data.frame")