首页 > 解决方案 > 如何创建循环和/或函数以将 200 列(并创建 200 个新列/变量)除以另一列以获得百分比?

问题描述

如何创建循环和/或函数以将 200 列(并创建 200 个新列/变量)除以另一列以获得百分比?

如何在循环中执行此操作,以便可以执行 200 列?以及如何命名列的名称,使其成为前面带有“p_”的旧列名?这可能吗?

例如,我正在尝试做这样的事情,但有 200 列。

fans <- data.frame(
  population = c(1234, 5678, 2345, 6789, 3456, 7890,
                4567, 8901, 5678, 9012, 6789),
  bearsfans = c(123, 234, 345, 456, 567,678, 789, 890, 901, 135, 246),
  packersfans = c(11,22,33,44,55,66,77,88,99,100,122),
  vikingsfans = c(39, 49, 59, 61, 32, 22, 31, 92, 52, 10, 122))

print(fans)

attach(fans)

## create new columns which are the ratio of fans to population

fans$p_bearsfan = bearsfans/population
print(fans)


 Output:
 ##     population bearsfans packersfans vikingsfans p_bearsfan
 ##  1        1234       123          11          39 0.09967585
 ##  2        5678       234          22          49 0.04121169

标签: rfunctionloops

解决方案


我们可以直接用一列划分多列。我们grep用来选择以结尾的列"fans"并使用这些名称来分配新列。

cols <- grep("fans$", names(fans), value = TRUE)
fans[paste0("p_", cols)] <- fans[cols]/fans$population

fans
#   population bearsfans packersfans vikingsfans p_bearsfans p_packersfans p_vikingsfans
#1        1234       123          11          39     0.09968      0.008914      0.031605
#2        5678       234          22          49     0.04121      0.003875      0.008630
#3        2345       345          33          59     0.14712      0.014072      0.025160
#4        6789       456          44          61     0.06717      0.006481      0.008985
#5        3456       567          55          32     0.16406      0.015914      0.009259
#6        7890       678          66          22     0.08593      0.008365      0.002788
#7        4567       789          77          31     0.17276      0.016860      0.006788
#8        8901       890          88          92     0.09999      0.009887      0.010336
#9        5678       901          99          52     0.15868      0.017436      0.009158
#10       9012       135         100          10     0.01498      0.011096      0.001110
#11       6789       246         122         122     0.03624      0.017970      0.017970

另附注:为什么不建议在 R 中使用 attach(),我应该使用什么来代替?


推荐阅读