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

问题描述 投票:0回答:1

我有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个数据帧中执行此操作?

非常感谢

r loops square-root sqrt
1个回答
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))
© www.soinside.com 2019 - 2024. All rights reserved.