r - R中在数据帧循环中应用函数的最佳方法
问题描述
我想循环通过 v1 到 v3 并将它们除以权重列,但我在循环中有问题(在现实生活中变量有不同的名称)
Name <- c("Jon", "Bill", "Maria", "Ben", "Tina")
v1 <- c(23, 41, 32, 58, 26)
v2 <- c(13, 41, 35, 18, 66)
v3 <- c(3,34, 33, 34, 23)
weight <- c(2, 4, 3, 5, 6)
df <- data.frame(Name,v1,v2,v3,weight)
print (df)
for(i in 2:4 (df)) { # for-loop over columns
df[ , i] <- df[ , i] /df$weight
}
解决方案
更好的解决方案是完全避免(显式)循环。这是一个使用 tidyverse 的解决方案across
:
library(tidyverse)
df <- data.frame(Name,v1,v2,v3,weight)
df %>% mutate(across(starts_with("v"), function(x) x / weight))
Name v1 v2 v3 weight
1 Jon 11.500000 6.50000 1.500000 2
2 Bill 10.250000 10.25000 8.500000 4
3 Maria 10.666667 11.66667 11.000000 3
4 Ben 11.600000 3.60000 6.800000 5
5 Tina 4.333333 11.00000 3.833333 6
推荐阅读
- html - 在线显示 2 个元素,并且仍然可以垂直调整任一元素
- sql - spark.sql() 的 REGEXP_REPLACE
- android - 在 Jetpack Compose 中更新 AndroidView 状态
- reactjs - 如何在反应前端中通过其 id 显示此博客 django 后端
- google-cloud-platform - 数据流作业失败错误:0 CPU 的配额不足
- cell - Python-docx:合并外部单元格时单元格边缘消失
- php - 节点 js,签署 utf 8 行并在 post 请求中发送
- docker-compose - 是否有其他人在 azure 管道中使用 host.docker.internal 时遇到问题
- typescript - 打字稿子类:在超类中引用派生类?
- r - GGally::ggparcoord() + geom_text() 不工作:打印数值而不是文本