如何从data.frame的每一行中提取不同的列?

时间:2014-08-30 15:37:02

标签: r

使用位置索引,例如:

> 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"

2 个答案:

答案 0 :(得分:5)

只需使用矩阵索引,如下所示:

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

cbind(seq_along(i), i)部分会创建您要提取的相关行和列的两列矩阵。

答案 1 :(得分: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"