【问题标题】:Best approach in R for applying a function in dataframe loop [duplicate]R中在数据帧循环中应用函数的最佳方法[重复]
【发布时间】:2021-12-11 13:48:02
【问题描述】:

我想循环通过 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
}

【问题讨论】:

  • 试试:df[, 2:4] &lt;- df[, 2:4]/df$weight

标签: r dataframe function loops weighted


【解决方案1】:

更好的解决方案是完全避免(显式)循环。这是使用 across 的 tidyverse 解决方案:

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

【讨论】:

  • 谢谢,但在现实生活中变量有不同的名称,所以我不能使用cross
  • 有多种方法可以使用不同的变量名。如果命名是问题的一个重要特征,你应该将它包含在你的 MRE 中。顺便说一句,在我的解决方案中将starts_with("v") 替换为-c(Name, weight) 会产生相同的结果。
猜你喜欢
  • 2013-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-08
  • 2023-01-24
  • 2019-07-29
  • 2017-06-12
  • 2015-11-06
相关资源
最近更新 更多