2014-08-30 2 views
3

Использование позиционного индекса, такие как:Как извлечь разные столбцы из каждой строки data.frame?

> i <- c(3,1,2) 

Как я могу использовать индекс для извлечения 3-го значения из первой строки в data.frame, то первое значение из второго ряда, то второе значение из третий ряд, и т.д.

Например, используя вышеупомянутый индекс и:

> dframe <- data.frame(x=c("a","b","c"), y=c("d","e","f"), z=c("g","h","i")) 

> dframe 
    x y z 
1 a d g 
2 b e h 
3 c f i 

Я хотел бы вернуть:

> [1] "g", "b", "f" 

ответ

4

Просто используйте матрицу индексацию, например:

dframe[cbind(seq_along(i), i)] 
# [1] "g" "b" "f" 

cbind(seq_along(i), i) часть создает матрицу два столбца соответствующей строки и столбца, который вы хотите извлечь.

+0

Только узнал что-то новое. (+1). Хороший ответ. –

+0

Спасибо! Индексирование матрицы - именно то, что мне нужно. –

+0

@ScottFunkhouser, без проблем. Спасибо за четко сформулированный «первый вопрос»! – A5C1D2H2I1M1N2O1R2T1

0

Как об этом:

Df <- data.frame(
    x=c("a","b","c"), 
    y=c("d","e","f"), 
    z=c("g","h","i")) 
## 
i <- c(3,1,2) 
## 
index2D <- function(v = i, DF = Df){ 
    sapply(1:length(v), function(X){ 
    DF[X,v[X]] 
    }) 
} 
## 
> index2D() 
[1] "g" "b" "f" 
Смежные вопросы