我是一个正在学习R的学生。我有一个目录,里面有很多文件。我需要写一个名为‘pollutantmean’的函数来从数据集(见下面的例子)计算污染物(硫酸盐或硝酸盐)的平均值。该函数有三个参数:‘directory’,‘pollutant’和‘id’。
作为我的函数的一部分,我已经成功地读取了所有文件,并将它们放入单个文件中,这样我现在就可以进行一些计算,如中位数、平均值等。我已经使用rbind和一个for循环来创建data.frame。
但问题是,在创建数据框之后,我现在需要找到一种方法,根据数据框中的一列或多列(第2列或第3列)对数据进行子集
我得到了一个函数原型,如下所示:
污染均值<- function(目录,污染物,id = 1:332) { ##‘目录’是长度为1的字符向量,指示CSV文件的位置##‘污染物’是长度为1的字符向量,指示我们将计算其平均值的污染物的名称;“硫酸盐”或“硝酸盐”。## ' ID‘是一个整数向量,表示要使用的监视器id号,##返回'id’向量中所有监视器列表中污染物的平均值(忽略NA值)
以下是此函数的输出示例:
pollutantmean("specdata", "sulfate", 1:10)
## [1] 4.064
pollutantmean("specdata", "nitrate", 70:72)
## [1] 1.706
pollutantmean("specdata", "nitrate", 23)
## [1] 1.281这是我的第一个实验,只使用一个ID和一个污染物类型(硫酸盐)
pollutantmean <- function(directory, pollutant, ID = 1:332) {
data <- read.csv("specdata/001.csv")
subset(data, data$ID == 1)
mean(data$sulfate, na.rm = TRUE)
}
pollutantmean("specdata", "sulfate", 1)
[1] 3.880701我不知道如何计算污染物类型的平均值,无论是‘硫酸盐’还是‘硝酸盐’
有没有人能就我的下一步行动提供一些建议?
以下是我的数据示例
"Date","sulfate","nitrate","ID"
"2003-01-01",NA,NA,1
"2003-01-02",NA,NA,1
"2003-01-03",NA,NA,1
"2003-01-04",NA,NA,1
"2003-01-05",NA,NA,1发布于 2014-08-07 18:12:42
我认为下面的内容会对你有所帮助。它还将帮助您从子设置...
mean(data[data$ID %in% id,pollutant],na.rm=T)发布于 2014-08-07 20:16:50
以下方法可能会有所帮助:
ddf = structure(list(Date = structure(1:5, .Label = c("2003-01-01",
"2003-01-02", "2003-01-03", "2003-01-04", "2003-01-05"), class = "factor"),
sulfate = c(50L, 75L, 85L, 45L, 25L), nitrate = c(854L, 658L,
485L, 458L, 152L), ID = c(1L, 1L, 2L, 1L, 2L)), .Names = c("Date",
"sulfate", "nitrate", "ID"), class = "data.frame", row.names = c(NA,
-5L))
ddf
Date sulfate nitrate ID
1 2003-01-01 50 854 1
2 2003-01-02 75 658 1
3 2003-01-03 85 485 2
4 2003-01-04 45 458 1
5 2003-01-05 25 152 2
ddfm = melt(ddf[,2:4], id="ID")
ddfm
ID variable value
1 1 sulfate 50
2 1 sulfate 75
3 2 sulfate 85
4 1 sulfate 45
5 2 sulfate 25
6 1 nitrate 854
7 1 nitrate 658
8 2 nitrate 485
9 1 nitrate 458
10 2 nitrate 152
with(ddfm, tapply(value, list(variable, ID), mean))
1 2
sulfate 56.66667 55.0
nitrate 656.66667 318.5https://stackoverflow.com/questions/25179540
复制相似问题