使用循环从R中的数据框中的其他列创建多个列

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

我有一个CSV文件,其中有19列9行,分别来自雨量计和它们的坐标(LongLat),平均雨月数。列是平均值,线是水分计。可以在此处访问CSV文件:https://drive.google.com/file/d/1wGVT5etZomYW-Cb6R3KgHaV4mXrTjlu4/view?usp=sharing

[目的是创建更多列以通过使用平均列中的等式,按月计算降雨因子。将使用第7列计算每个测雨量计(9行)的1月降雨因子,使用第8列计算2月的降雨。 ,按第9列行进...

我正在为每一列尝试此代码,并且可以工作,但是可以减少代码并通过循环制作?

library(tidyverse)

setwd("C:/scriptsr/R_postos_pluviometricos_interp_FUNCEME/")

#Code    
pluviometros <- read.csv("postos_fatorR.csv",
                                 header = T,
                                 sep = ",",
                                 stringsAsFactors = FALSE)

View(pluviometros)

pluviometros <- mutate(.data=pluviometros,R.JAN=67.355*((pluviometros[1:nrow(pluviometros),7]^2)/pluviometros[1:nrow(pluviometros),19])^0.85,
                                       R.FEV=67.355*((pluviometros[1:nrow(pluviometros),8]^2)/pluviometros[1:nrow(pluviometros),19])^0.85,
                                       R.MAR=67.355*((pluviometros[1:nrow(pluviometros),9]^2)/pluviometros[1:nrow(pluviometros),19])^0.85,
                                       R.APR=67.355*((pluviometros[1:nrow(pluviometros),10]^2)/pluviometros[1:nrow(pluviometros),19])^0.85,
                                       R.MAY=67.355*((pluviometros[1:nrow(pluviometros),11]^2)/pluviometros[1:nrow(pluviometros),19])^0.85,
                                       R.JUN=67.355*((pluviometros[1:nrow(pluviometros),12]^2)/pluviometros[1:nrow(pluviometros),19])^0.85,
                                       R.JUL=67.355*((pluviometros[1:nrow(pluviometros),13]^2)/pluviometros[1:nrow(pluviometros),19])^0.85,
                                       R.AGO=67.355*((pluviometros[1:nrow(pluviometros),14]^2)/pluviometros[1:nrow(pluviometros),19])^0.85,
                                       R.SEP=67.355*((pluviometros[1:nrow(pluviometros),15]^2)/pluviometros[1:nrow(pluviometros),19])^0.85,
                                       R.OCT=67.355*((pluviometros[1:nrow(pluviometros),16]^2)/pluviometros[1:nrow(pluviometros),19])^0.85,
                                       R.NOV=67.355*((pluviometros[1:nrow(pluviometros),17]^2)/pluviometros[1:nrow(pluviometros),19])^0.85,
                                       R.DEC=67.355*((pluviometros[1:nrow(pluviometros),18]^2)/pluviometros[1:nrow(pluviometros),19])^0.85
                                       )
View(pluviometros)
r loops dataframe tidyverse mutate
1个回答
0
投票

[这是mutate_at中的dplyr的一种方法:

data <- read.csv("https://docs.google.com/uc?id=1wGVT5etZomYW-Cb6R3KgHaV4mXrTjlu4&export=download")

data %>%
  mutate_at(vars(JAN:DEC), .funs = list(R = ~ 67.355 * (.)^2 / TOTAL_pa^0.85))
© www.soinside.com 2019 - 2024. All rights reserved.