首页 > 解决方案 > 什么是执行取决于选择由另一列索引的各种列的计算的有效方法

问题描述

我试图从另一列中减去一列,但列会根据行而变化。这听起来令人困惑,但下面的示例更有意义:如果我有以下数据框 (df) abcd 2 56 14 16 3 89 17 13 2 47 14 19

我想计算 e,其中 e 等于 b 列 - 由 a 索引的列。我对每一行都使用了一个 for 循环,但它非常慢:

for(i in 1:nrow(df)){
  df$e <- df$b[i] - df[i, (as.integer(df$a[i]))]
}

df

a  b  c  d  e
2  56 14 16 42
3  89 17 13 76
2  47 14 19 33

标签: rdataframeindexing

解决方案


我们可以使用行/列索引来向量化它

df$e <- df$b - df[-1][cbind(seq_len(nrow(df)), df$a)]
df$e

数据

df <- structure(list(a = c(2L, 3L, 2L), b = c(56L, 89L, 47L), c = c(14L, 
17L, 14L), d = c(16L, 13L, 19L)), class = "data.frame", 
   row.names = c(NA, 
-3L))

推荐阅读