R编程教程>;当我计算平均值时,如何为任一列创建子集?

R编程教程>;当我计算平均值时,如何为任一列创建子集?,r,dataframe,subset,R,Dataframe,Subset,我正在学习R atm,其中一个练习是创建一个程序来读取列“硫酸盐”或列“硝酸盐”的平均值。然而,我只能得到其中一列的正确平均值,而不是全部。 当我计算平均值时,你能给我一些关于如何计算任一列的子集的帮助吗 我采取了以下步骤来完成这个练习 1.创建文件列表#将所有文件合并到一个数据框中。 2.创建一个空数据帧 3.循环浏览文件,然后将它们绑定在一起 4.数据帧子集 5.计算列的平均值 实际输出: pollutantmean("specdata", "sulfate", 1:10) ## [1] 4

我正在学习R atm,其中一个练习是创建一个程序来读取列“硫酸盐”或列“硝酸盐”的平均值。然而,我只能得到其中一列的正确平均值,而不是全部。 当我计算平均值时,你能给我一些关于如何计算任一列的子集的帮助吗

我采取了以下步骤来完成这个练习 1.创建文件列表#将所有文件合并到一个数据框中。 2.创建一个空数据帧 3.循环浏览文件,然后将它们绑定在一起 4.数据帧子集 5.计算列的平均值

实际输出:

pollutantmean("specdata", "sulfate", 1:10) ## [1] 4.064128 
pollutantmean("specdata", "nitrate", 70:72) ## [1] 1.706047 
pollutantmean("specdata", "nitrate", 23) ## [1] 1.280833 

我还尝试通过将两列合并为一列来修复它,它将返回NaN

mean(dat_subset[,c("sulfate","nitrate")], na.rm=TRUE)

您可以根据
data.table
找到一个非常简洁的解决方案。您可以同时对多个列执行操作

库(data.table)

pollutantmean我们可以读取
id
中提到的文件,并将它们组合在一起,将
pollutant
中提到的列子集,然后取平均值。使用base R,我们可以执行以下操作:

pollutantmean <- function(directory,pollutant,id=1:132){

   files_list <- list.files(directory, full.names=TRUE)   
   dat <- do.call(rbind, lapply(files_list[id], read.csv))
   #For one column
   mean(dat[[pollutant]], na.rm = TRUE)
   #For multiple columns
   #colMeans(dat[pollutant], na.rm = TRUE)

}

pollutantmean("specdata", "sulfate", 1:10)

pollutantmean如果您希望根据输入“id”对“行”进行子集划分,您可以按照Linog的建议在创建数据帧后执行以下操作

pollutantmean <- function(directory=NULL,pollutant,id=1:132){
  #create a list of files

  dat_subset <- dat[id,]
  print(mean(dat_subset[, pollutant], na.rm=TRUE)  )    
}

pollutantmean当您执行
pollutantmean(“specdata”,“sulfate”,1:10)
时,您期望id 1到10的“sulfate”列的平均值,对吗?这似乎没有包含在您的代码中。
pollutantmean <- function(directory=NULL,pollutant,id=1:132){
  #create a list of files

  dat_subset <- dat[id,]
  print(mean(dat_subset[, pollutant], na.rm=TRUE)  )    
}