2014-01-20 5 views
0

Я хочу используя R организовать наиболее эффективный поиск значения в таблицах в формате data.frame нравится этаR эффективный поиск в data.frame

x01 x02 x03 x04 x05 x06 x07 
1 NA 100 200 300 400 500 600 
2 10 1 4 3 6 7 1 
3 20 2 5 2 5 8 2 
4 30 3 6 1 4 9 8 

значений в первой строке и первом столбце в порядок увеличения. Например, мне нужно найти значение для перекрестия столбца, содержащего 300 в первой строке и строке, содержащей 20 в первом столбце. Значение 2. Код для этого:

coefficient_table_1 <- data.frame(
x01=c(NA, 10, 20, 30), 
x02=c(100, 1, 2, 3), 
x03=c(200, 4, 5, 6), 
x04=c(300, 3, 2, 1), 
x05=c(400, 6, 5, 4), 
x06=c(500, 7, 8, 9), 
x07=c(600, 1, 2, 8) 
) 


col_value <- 300 
row_value <- 20 

col <- 0 

for(i in 2:ncol(coefficient_table_1)){ 
    if(coefficient_table_1[1,i]==col_value){ 
     col <- i 
    } 
} 

row <- which(coefficient_table_1$x01==row_value) 


value <- coefficient_table_1[row, col] 

Таблица может быть большой и поиск может быть расположен внутри петли. Каков наиболее эффективный способ поиска в data.frame?

ответ

2

Ваши данные являются числовыми, поэтому ваш лучший способ действий, вероятно, использовать массивы, а не кадры данных.

Поскольку массивы содержат данные только одного класса (например, числовые), многие операции выполняются намного быстрее, когда ваши данные находятся в формате массива.

Попробуйте это:

x <- as.matrix(coefficient_table_1) 
x[which(x[, 1]==row_value), which(x[1, ]==col_value)] 

x04 
    2 
+0

Может быть стоит упомянуть возможность возвращать матрицу координат, как в 'которых (my.mat == 7, array.indices = TRUE)' –

Смежные вопросы