R 3.1.0函数,用于获取具有NA值的列的平均值
我有一组CSV文件。每个CSV文件上都有一个唯一的ID,以及其他列,如“日期”、“硫酸盐”、“硝酸盐”。这是关于空气污染的数据 该函数必须使用3个参数:“目录”、“污染物”、“id” 这是原始数据格式(对于001.csv文件): 这是我目前的职能:R 3.1.0函数,用于获取具有NA值的列的平均值,r,csv,R,Csv,我有一组CSV文件。每个CSV文件上都有一个唯一的ID,以及其他列,如“日期”、“硫酸盐”、“硝酸盐”。这是关于空气污染的数据 该函数必须使用3个参数:“目录”、“污染物”、“id” 这是原始数据格式(对于001.csv文件): 这是我目前的职能: pollutantmean <- function (directory, pollutant, id = 1:332){ files_full <- list.files (directory, full.names = TRUE)
pollutantmean <- function (directory, pollutant, id = 1:332){
files_full <- list.files (directory, full.names = TRUE)
dat <- data.frame ()
for (i in id){
dat <- rbind (dat, files_full[i])
}
datasub <- dat[,pollutant]
}
pollutanmean我发现你的代码有两个问题
list.files只列出您的文件。它不会将文件读取到工作空间
在子设置data.frame时,必须将列名指定为字符。
例如:dat[,“列名称”]
我已经为你修改了函数,试试这个
pollutantmean <- function (directory, pollutant, id = 1:332){
files_full <- list.files (directory, full.names = TRUE)
dat <- data.frame()
for (i in id){
dat <- rbind (dat, read.table(files_full[i],sep="",.......))
}
datasub <- dat[,"pollutant"]
}
污染指数1。我想您的意思是用户输入了pollutanmean(“specdata”,“norate”,70:72)
——列名的适当大小写。2:70:72
与示例数据不符。3:(最后但并非最不重要)你是取两列的平均值。你不是想根据用户为第二个参数输入的内容进行过滤吗?@MatthewLundberg 1。csv文件中的列名为“硝酸盐”,不带大写字母。2.格式化数据的示例仅适用于文件:001.csv。他们将070.csv的数据格式化为示例,但在ID列中显示70。3.过滤器将是第二个和第三个参数。平均值仅为一列,即“硝酸盐”或“硫酸盐”列,但在它被ID列子集之前(例如csv文件的编号)。谢谢。你实际上并没有在任何地方读取数据。您只需输入文件的字符串值\u full
,没有read.table。如果这是针对Coursera课程的,那么对于这个简单的任务,已经有数百个问题被问到了。尝试搜索[r]硝酸盐
或[r]332
@MrFlick是的,这是coursera类的。糟糕的是,我忘记了这一行:当你看你的函数时,你认为它应该返回什么?默认情况下,R将返回函数中计算的最后一个对象。最后一条语句是赋值,赋值实际上返回右边的值,但不可见(返回的是值,但除非显式打印,否则不会看到)。您可以删除分配以仅返回dat的污染物列,或添加另一行,仅使用datasub
返回该值。非常感谢!但是我在您的代码中得到了这个错误:read.table(files_full[i],sep=“”,…):找不到对象“….”为什么?请解释一下。这是在输入:pollutanmean(“specdata”,“sulfate”,1:40)Hi时,通过“…”我的意思是“等等”,也就是说,您可以编写您想要的其他参数。这并不意味着要写。。。。。希望您能理解。@user2743244。。。我有这样的代码:read.table命令中的pollutanmean write argument header=TRUE。如果使用.csv文件,则必须添加sep=“,”。所有这些都是非常基本的事情。Read.table函数的阅读帮助。
Error in `[.data.frame`(dat, , pollutant) : undefined columns selected
In addition: Warning messages:
1: In `[<-.factor`(`*tmp*`, ri, value = "specdata/071.csv") :
invalid factor level, NA generated
2: In `[<-.factor`(`*tmp*`, ri, value = "specdata/072.csv") :
invalid factor level, NA generated
pollutantmean <- function (directory, pollutant, id = 1:332){
files_full <- list.files (directory, full.names = TRUE)
dat <- data.frame()
for (i in id){
dat <- rbind (dat, read.table(files_full[i],sep="",.......))
}
datasub <- dat[,"pollutant"]
}
pollutantmean <- function (directory, pollutant, id = 1:332){
library(data.table)
files_full <- list.files (directory, full.names = TRUE)
dat_list <- list()
for (i in id){
dat_list[[i]] <- fread(files_full[i],sep="",.......)
}
dat <- rbindlist(dat_list)
return(mean(dat[,pollutant]))
}