Как назначить символ в apply для оценки функции в цикле r - PullRequest
0 голосов
/ 05 июля 2018

У меня есть небольшая проблема, чтобы сделать движение в 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 $ Проводимость», а затем на x Давление (и другие переменные). Итак, я сделал это:

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),]

}

Итак, просто мне нужен правильный способ использования assign или, возможно, другого варианта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...