
[英]Calculate Mean based on row and column conditions across multiple CSV files with removing NA data
[英]Mean of a particular column in combination of csv files
我真的是R的新手。将不胜感激。
我有很多文件,需要将它们合并为一个数据帧,然后获取第2列或第3列的均值。我已经尝试过,但是我感觉自己犯了一些愚蠢的错误,或者可能是完全错误的。
polmean <- function(directory, pol, id = 1:3) {
Dataframe <- function (id) {
Filenames <- list.files (pattern = "*.csv")
Reqfiles <- Filenames [id]
LoadReqfiles <- lapply(Reqfiles, read.csv)
}
x <- Dataframe (id)
Colomnmeans <- function (pol, removeNA = TRUE) {
means <- 0
if (pol == "sulfate") {
means <- mean (x[,2], na.rm = removeNA)
} else {
means <- mean (x[,3], na.rm = removeNA)
}
means
}
Colomnmeans (pol, removeNA = TRUE)
}
这给我一个错误:x [,2]不正确的尺寸数。
谢谢
您在这里犯了几个错误。 错误#1:函数Dataframe
没有返回值。 错误消息2:使用lapply
,结果是一个列表。 因此, x
是数据帧的list
(而不是?data.frame
)。 因此,您将无法访问数据框列表的不同列。 您必须遍历数据帧。
所以试试这个:
polmean <- function(directory, pol, id = 1:3) {
Dataframe <- function (id) {
Filenames <- list.files(directory,pattern=".csv",full.names=TRUE)
Reqfiles <- Filenames[id]
LoadReqfiles <- lapply(Reqfiles, read.csv)
return(LoadReqfiles) # Mistake1: Need to return the value
}
x <- Dataframe(id)
Colomnmeans <- function (pol, removeNA = TRUE) {
means <- NULL
if (pol == "sulfate") {
for(i in 1:length(x)) means <- c(means,x[[i]][,2])
} else {
for(i in 1:length(x)) means <- c(means,x[[i]][,3])
}
mean(means, na.rm = TRUE)
}
Colomnmeans(pol, removeNA = TRUE)
}
请注意,在上面的代码中,我将初始化值用作NULL
,这是一个零长度的向量。 尝试:
length(NULL)
因此,与使用初始化值0
相比,这不会影响mean
函数。
希望这可以帮助!!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.