首页 > 解决方案 > 如何在 lapply 中分配一个字符以评估循环 r 中的函数

问题描述

我在 R 中做一个运动有一点问题。这就是我的数据的样子:

df1 <- read.csv(text="Time, Depth, Conductivity, Temperature, Pressure,Turbidity 
26/04/2018 15:12:53, 1.01087, 0.0388654, 8.23849, 11.1496,  46.5928
26/04/2018 15:12:53, 1.10582, 0.0388088, 8.23773, 11.2452,  47.8815
26/04/2018 15:12:53, 1.18670, 0.0394323, 8.23928, 11.3265,  47.2870 
26/04/2018 15:12:54, 1.26171, 0.0393001, 8.24116, 11.4020,  47.9308
26/04/2018 15:12:54, 1.47019, 0.0382799, 8.24026, 11.6118,  45.1384
26/04/2018 15:12:54, 1.60172, 0.0390357, 8.24002, 11.7441,  45.5681
26/04/2018 15:12:54, 1.73643, 0.0387522, 8.24033, 11.8797,  45.8713
26/04/2018 15:12:54, 1.87313, 0.0390168, 8.23834, 12.0172,  45.0766")

# 我这样做是为了我的分析并得到每米深度的平均值(效果很好):

library(stringr)
df1$time <- sapply(strsplit(as.character(as.factor(df1$Depth)), " "), "[", 1)
meter <- str_replace(df1$time,"\\.",paste0(":"))
meter <-unlist(lapply(strsplit(meter, "\\:"), function(x)x[1]))
df1$time <- NULL
df1$meter <- meter

l <- split(df1, df1$meter)
l.result <- lapply(l, function(x){mean(x$Temperature)})
l.result <- as.data.frame(unlist(l.result))
l.result$meter <- rownames(l.result)
names(l.result) <- c("mean","meter")
df1$meter <- NULL
l.result$meter <- as.numeric(l.result$meter)

l.result <- l.result[order(l.result$meter),]

# 然而,现在我需要评估我的数据框的其他变量(电导率、压力等),我试图做一个循环并将“x$Temperature”替换为“x$Conductivity”,然后替换为x$Pressure(和其他变量)。所以我这样做了:

names <- c("x$Conductivity", "x$Temperature", "x$Pressure",
           "x$Turbidity", "x$Sea_Pressure", "x$Salinity")

for(i in length(names)){

tmp <- names[i] # (temporal variable)

df1$time <- sapply(strsplit(as.character(as.factor(df1$Depth)), " "), "[", 1)
meter <- str_replace(df1$time,"\\.",paste0(":"))
meter <-unlist(lapply(strsplit(meter, "\\:"), function(x)x[1]))
df1$time <- NULL
df1$meter <- meter

l <- split(df1, df1$meter)
l.result<- lapply(l, function(x){mean(assign(tmp,names[i])}) #*Here's the problem
l.result <- as.data.frame(unlist(l.result))
l.result$meter <- rownames(l.result)
names(l.result) <- c("mean","meter")
df1$meter <- NULL
l.result$meter <- as.numeric(l.result$meter)

l.result <- l.result[order(l.result$meter),]

}

所以,我只需要正确的方法来使用分配,或者可能是另一种选择。

标签: rfunctionloopsvariablesassign

解决方案


推荐阅读