如何通过多个数据帧循环功能

时间:2019-12-11 18:35:25

标签: r loops square-root sqrt

我有30个数据帧,称为moonx.cvs。我想循环此平方根命令,并在每个名为'B'的数据框中创建一个包含平方根值的新列。

moon1.csv$B <-sqrt(moon1.csv$Ay^2+moon1.csv$Ax^2+moon1.csv$Az^2)
moon2.csv$B <-sqrt(moon2.csv$Ay^2+moon2.csv$Ax^2+moon2.csv$Az^2)

我如何在所有30个数据帧中执行此操作?

非常感谢

1 个答案:

答案 0 :(得分:3)

我们可以将数据集放入list中,并完成所有一次,然后将输出存储在list中。假设对象名称为“ moon1.csv”,“ moon2.csv”,...“ moon30.csv”

nm1 <- sprintf("moon%d.csv", 1:30)
lst1 <- lapply(mget(nm1), transform, B = sqrt(Ay^2 + Ax^2 + Az^2))

如果我们要在全局环境中的原始对象中创建列名(不建议这样做,因为在每个步骤中可能会再次要求这样做)

for(nm in nm1) assign(nm, `[<-`(get(nm), "B", 
         value = with(get(nm), sqrt(Ay^2 + Ax^2 + Az^2))))

或使用tidyverse

library(purrr)
library(dplyr)
lst1 <- map(get(nm1), mutate, B = sqrt(Ay^2 + Ax^2 + Az^2))