r - 根据R中行的其余部分替换变量的值
问题描述
我有一个变量,其值取同一行中其他变量的最大值。我使用了一个 for 循环,它可以完成这项工作,但是有 220,000 次观察,它的效率相当低。
for (i in 1:nrow(df)) {
x <- c(df$var1[i], df$var2[i], df$var3[i], df$var4[i])
df$var5[i] <- max(x)
}
比遍历每一行更顺畅的解决方法有什么想法吗?
解决方案
这是一个 data.table 方法
DT[, var1234_min := do.call(pmax,.SD), .SDcols = patterns("var[1-4]")]
样本数据
library(data.table)
set.seed(123)
n = 10
DT <- data.table( id = 1:10,
var1 = rnorm(n),
var2 = rnorm(n),
var3 = rnorm(n),
var4 = rnorm(n),
var5 = rnorm(n))
# id var1 var2 var3 var4 var5
# 1: 1 -0.56047565 1.2240818 -1.0678237 0.42646422 -0.69470698
# 2: 2 -0.23017749 0.3598138 -0.2179749 -0.29507148 -0.20791728
# 3: 3 1.55870831 0.4007715 -1.0260044 0.89512566 -1.26539635
# 4: 4 0.07050839 0.1106827 -0.7288912 0.87813349 2.16895597
# 5: 5 0.12928774 -0.5558411 -0.6250393 0.82158108 1.20796200
# 6: 6 1.71506499 1.7869131 -1.6866933 0.68864025 -1.12310858
# 7: 7 0.46091621 0.4978505 0.8377870 0.55391765 -0.40288484
# 8: 8 -1.26506123 -1.9666172 0.1533731 -0.06191171 -0.46665535
# 9: 9 -0.68685285 0.7013559 -1.1381369 -0.30596266 0.77996512
#10: 10 -0.44566197 -0.4727914 1.2538149 -0.38047100 -0.08336907
推荐阅读
- python - 附加到 .join()
- babeljs - 为什么要排除 node_modules 被 Babel 转译?
- .net - Raspberry PI 上的 .Net 5.0 Blazor 问题不显示 NavMenu
- sql - 将第 2 列的每一行应用到第 1 列的每一行
- datadog - 每周导出 Datadog 监视器警报
- python - 寻找子弹射击的pygame矢量角度
- android - onActivityResult Uri - 创建子文件夹并获取新子文件夹的 DocumentUri
- css - Firefox Developer Edition 显示图像不正确?
- c# - C#如何在没有ORM的情况下从RDBMS填充对象列表
- javascript - a内的总和值每次我按下一个按钮