2014-08-30 78 views
3

使用位置索引,例如:如何从data.frame的每一行中提取不同的列?

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

如何使用索引来提取从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)。很好的答案。 – 2014-08-30 15:50:23

+0

谢谢!矩阵索引正是我所需要的。 – 2014-08-30 15:59:11

+0

@ScottFunkhouser,没问题。感谢您明确提出的“第一个问题”! – A5C1D2H2I1M1N2O1R2T1 2014-08-30 16:14:36

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" 
相关问题