r - 什么是执行取决于选择由另一列索引的各种列的计算的有效方法
问题描述
我试图从另一列中减去一列,但列会根据行而变化。这听起来令人困惑,但下面的示例更有意义:如果我有以下数据框 (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
解决方案
我们可以使用行/列索引来向量化它
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))
推荐阅读
- java - Java:如何使用 Luhn 检查和使用方法检查信用卡的有效性
- javascript - .map 不是函数 - TypeScript 错误
- python - Django 在覆盖保存函数调用时更改变量类型
- node.js - ubuntu 服务器上的 Nodejs 版本控制
- html - CSS渐变方向只有一个部分
- python - Python - 修补模块功能?
- libreoffice - 在 Calc 宏中使用由突出显示的单元格确定的范围,而不是绝对单元格引用
- rest-assured - 从匹配多个条件的 JsonPath 获取字符串值
- python-3.x - 欧拉项目#59,错误答案
- python - python中cos函数的结果不正确