我需要使用以下参数创建一个名为PollutantMean
的函数:directory
,pollutant
和id=1:332
)
我已经编写了大部分代码,但我无法弄清楚如何将目录指定为变量。我当前的工作目录是C:/Users/User/Documents
。我尝试将变量写为:
directory <- "C:/Users/User/specdata"
这并没有奏效。
接下来我尝试了以下内容:
directory <- list.files("specdata", full.names=TRUE)
这也没有效果。
关于如何改变这个的任何想法?
答案 0 :(得分:2)
如果您尝试将当前工作目录中的值分配给变量“directory”,为什么不采用简单方法并添加:
directory <- getwd()
这应该获取工作目录的内容并将值分配给变量“directory”。
答案 1 :(得分:0)
我已经将目录作为变量工作,我通常将它们声明为
directory<-"C://Users//User//specdata//"
收回你的榜样。 然后,如果我想读取此目录中的特定文件,我将会像:
read.table(paste(directory,"myfile.txt",sep=""),...)
在文件中写入
的过程相同write.table(res,file=paste(directory,"myfile.txt",sep=""),...)
这有帮助吗?
编辑:然后你可以使用read.csv,它会正常工作
答案 2 :(得分:0)
我认为您对R
中的作业操作感到困惑。以下一行
directory <- "C:/Users/User/specdata"
将一个字符串分配给恰好被称为directory
的新对象。它与您的工作环境具有相同的效果
elephant <- "C:/Users/User/specdata"
要更改R
读取其文件的位置,请使用函数setwd
(设置工作目录的缩写):
setwd("C:/Users/User/specdata")
您还可以为读入数据的函数指定完整路径名(如read.table
)。针对您的具体问题,
# creates a list of all files ending with `csv` (i.e. all csv files)
all.specdata.files <- list.files(path = "C:/Users/User/specdata", pattern = "csv$")
# creates a list resulting from the application of `read.csv` to
# each of these files (which may be slow!!)
all.specdata.list <- lapply(all.specdata.files, read.csv)
然后我们使用dplyr::rbind_all
将它们行绑定到一个文件中。
library(dplyr)
all.specdata <- rbind_all(all.specdata.list)
然后使用colMeans
来确定宏观手段。不知道如何在不看数据的情况下执行此操作。
答案 3 :(得分:0)
假设每个300多个csv文件中的列都相同,即列j在所有文件中包含相同类型的数据,则以下示例应该是有用的:
# let's use a temp directory for storing the files
tmpdr <- tempdir()
# Let's creat a large matrix of values and then split it into many different
# files
original_data <- data.frame(matrix(rnorm(10000L), nrow = 1000L))
# write each row to a file
for(i in seq(1, nrow(original_data), by = 1)) {
write.csv(original_data[i, ],
file = paste0(tmpdr, "/", formatC(i, format = "d", width = 4, flag = 0), ".csv"),
row.names = FALSE)
}
# get a character vector with the full path of each of the files
files <- list.files(path = tmpdr, pattern = "\\.csv$", full.names = TRUE)
# read each file into a list
read_data <- lapply(files, read.csv)
# bind the read_data into one data.frame,
read_data <- do.call(rbind, read_data)
# check that our two data.frames are the same.
all.equal(read_data, original_data)
# [1] TRUE