首页 > 解决方案 > 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
}

标签: rdataframefunctionloopsweighted

解决方案


更好的解决方案是完全避免(显式)循环。这是一个使用 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

推荐阅读