R read.csv l oop с итерационной переменной в кавычках - PullRequest
1 голос
/ 28 января 2020

Это мой код:

library(data.table)
library(stringr)
parameters <- c("conductivity","calcium","chloride","magnesium","phosphate","potassium","salinity","sodium","sulphate")
for (i in parameters){
  i <- read.csv(str_c("./Data/Parameters/",i,".csv"), sep=",", header=FALSE)
  i <- unique(i)
  i <- subset(i, select=c(1,2,4,6))
  i <- setnames(i, c("site","date", str_c("",i,""), "material"))
  i[,3] <- as.numeric(i[,3])
  i <- subset(i, i > 0)
}

Теперь есть две вещи, которые здесь не работают. Первый - в функции setnames: он не понимает, что ему нужно пометить один из столбцов CSV именем переменной. Второе - это то, что он на самом деле не называет импортированные файлы «проводимостью», «кальцием» и т. Д. c, а просто называет их все «я». Как я могу это исправить?

Ответы [ 2 ]

1 голос
/ 29 января 2020

Другой вариант с использованием data.table:

library(data.table)
parameters <- c("conductivity","calcium","chloride","magnesium","phosphate",
    "potassium","salinity","sodium","sulphate")
lapply(parameters, function(x) {
    DT <- unique(fread(paste0("./Data/Parameters/", x, ".csv"), header=FALSE))[,
        V4 := as.numeric(V4)][
            V4 > 0, paste0("V", c(1,2,4,6))]
    setnames(DT, names(DT), c("site","date", x, "material"))
})
1 голос
/ 28 января 2020

Мы можем сделать это с map

library(stringr)
library(dplyr)
library(purrr)

map(parameters, ~ read_csv(str_c("./Data/Parameters/", .x, ".csv")) %>%
               distinct %>%
                select(1, 2, 4, 6) %>%
                rename_at(3, ~  .x) %>%
                mutate(!! .x := !! rlang::sym(.x)) %>%
                filter_at(vars(.x), any_vars(. > 0))
           )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...