Эффективный способ поиска в кадре данных в R - PullRequest
0 голосов
/ 26 сентября 2018

Ну, может быть, это было глупо с моей стороны - в качестве примера приводить пса, рыбу и лошадь.Что, если у меня вместо этого есть Местоположение, то есть, а индекс находится там, где в местах 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'] и получить все значения индекса dog1 в местоположении 1.

В Python я бысоздайте словарь для location1 и получите

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

и то же самое для location2_dict и т. д.

В любом случае, в r есть эффективный способ быстрого просмотра data.frame.Представь, что у меня 10 ^ 6 строк

1 Ответ

0 голосов
/ 26 сентября 2018

Определите функцию для получения значений индекса, а затем 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")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...