我从未使用过循环,但现在需要多次重复一项计算,并希望将输出存储在新的数据框中。
我发现了一些看起来合适但不起作用的代码。 请找一个只有很少列的示例
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/