我有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个数据帧中执行此操作?
非常感谢
答案 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))