通过使用行和列的索引向量从数据帧中提取值?

时间:2020-03-25 21:53:06

标签: r

我正在寻找一种更好的方法,该方法通过对行和列使用索引向量来从数据帧中提取值。下面的示例很好用,但我想有一些使用sapply或purr :: map技巧的更有效的方法?

df <- data.frame(a = c("a1","a2", "a3", "a4"), b= c("b1","b2", "b3", "b4"), stringsAsFactors = F)
col_selector <- sample(as.integer(c(1,2)), size = 10, replace = T)
row_selector <- sample(as.integer(c(1:4)), size = 10, replace = T)

v = character()
for (i in seq_along(col_selector)) {
  v = c(v, df[row_selector[i], col_selector[i]])
} 
print(v)
[1] "a4" "a3" "a4" "a2" "a3" "a1" "b1" "b1" "b3" "b1"

2 个答案:

答案 0 :(得分:3)

我们可以使用cbind创建一个matrix行/列索引,并使用它从数据集中提取元素

v2 <- df[cbind(row_selector, col_selector)]
identical(v, v2)
#[1] TRUE

答案 1 :(得分:3)

我个人认为@akrun的回答是最优雅的方法。这是另一个使用mapply

的基本R解决方案
v <- mapply(function(x,y) df[x,y], row_selector,col_selector)