我有一个向量告诉我,对于日期框架中的每一行,应该更新该行中的值的列索引。
> set.seed(12008); n <- 10000; d <- data.frame(c1=1:n, c2=2*(1:n), c3=3*(1:n))
> i <- sample.int(3, n, replace=TRUE)
> head(d); head(i)
c1 c2 c3
1 1 2 3
2 2 4 6
3 3 6 9
4 4 8 12
5 5 10 15
6 6 12 18
[1] 3 2 2 3 2 1
这意味着对于第 1 行和第 4 行,应更新 c3;对于第 2、3 和 5 行,应更新 c2(除其他外)。在 R 中使用矢量化操作(即没有apply
和朋友)实现这一目标的最简洁方法是什么?编辑:而且,如果可能的话,没有 R 循环?
我曾考虑过转换d
为矩阵,然后使用一维向量寻址矩阵元素。但是我还没有找到一种从行索引和列索引计算一维地址的干净方法。