以狗,鱼和马为例也许对我来说是愚蠢的。 如果我有位置而不是位置,该索引是它们位于位置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行
答案 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")