这是我的代码:
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的一列。第二个问题是,它实际上并不使用“电导率”,“钙”等调用导入的文件,而只是将它们全部称为“ i”。我该如何解决?
我们可以用map
来做到这一点
files <- str_c(""./Data/Parameters/", parameters, ".csv")
map(parameters, ~ read_csv(str_c(""./Data/Parameters/"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))
)