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