r - 如何重复计算许多单列并将输出存储在 R 中的新数据框中?

标签 r

我从未使用过循环,但现在需要多次重复一项计算,并希望将输出存储在新的数据框中。

我发现了一些看起来合适但不起作用的代码。 请找一个只有很少列的示例

df<-data.frame("running.nr" = 1:5,
               "spec1"= c(4,7,2,90,15),
               "spec2"= c(3,10,48,10,4),
               "spec3"= c(3,10,49,30,3),
               "spec4"= c(10,27,99,130,22),
               "n.id"= c(9,25,99,100,20))

这是我需要对 50 多列重复的计算。输出应存储在新的数据框中,还包含 df 中的“running.nr”列

perc.comp1<-(df[,"spec1"]*100)/df$n.id
perc.comp2<-(df[,"spec2"]*100)/df$n.id
perc.comp3<-(df[,"spec3"]*100)/df$n.id
perc.comp4<-(df[,"spec4"]*100)/df$n.id

df.perc<-data.frame(df$running.nr,
                    perc.comp1,
                    perc.comp2,
                    perc.comp3,
                    perc.comp4)

这是我试图使上面的代码不再重复的非工作循环:

for(col in names(df)[2:5]) {
  df[paste0(col, "_pct")] = df[x] *100/ df$n.id}

这是我收到的错误消息: “[.data.frame(df, x) 中出现错误:未找到对象“x”” 然而,我也不确定 for 循环是否完全达到我想要的结果。感谢您的时间和帮助!

最佳答案

您可以选择列并直接执行此计算

cols <- grep("spec", names(df), value = TRUE)
df[paste0(cols, "_pct")] <- (df[cols] * 100)/df$n.id

df
#  running.nr spec1 spec2 spec3 spec4 n.id spec1_pct spec2_pct spec3_pct spec4_pct
#1          1     4     3     3    10    9 44.444444  33.33333  33.33333  111.1111
#2          2     7    10    10    27   25 28.000000  40.00000  40.00000  108.0000
#3          3     2    48    49    99   99  2.020202  48.48485  49.49495  100.0000
#4          4    90    10    30   130  100 90.000000  10.00000  30.00000  130.0000
#5          5    15     4     3    22   20 75.000000  20.00000  15.00000  110.0000

关于r - 如何重复计算许多单列并将输出存储在 R 中的新数据框中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56617608/

相关文章:

r - Plotly:如何自定义圆环图中的颜色?

r - geom_rect + coord_map = 非常慢

r - R 中的 WGCNA 安装问题

R apply 语句不适用于矩阵

python - 如何使用 plotnine 库在 Python 中绘制函数图

r - xts 将数据帧转换为字符

r - dplyr 版本的数据框分组然后在每组上创建回归模型

r - 使用 .SDcols 对 r 中的 data.table 中的列值求和

r - 突发 "unused argument"错误

r - 加速 R 中向量的 setdiff()、intersect()、union() 操作