我有一个情况。我得到的意思不适合多个id,并且已经找到了解决问题的方法,但是寻找可能解决方案的指导。
我的数据位于数据框中。
当我返回b时,它会向我显示正确的结果,但对于多个id,它们会出现在不同的部分。例如,70:72显示
1st
$nitrate...underneath the values
2nd
$nitrate...underneath values
3rd
$nitrate...and values
问题:当我继续计算多个id的平均值时,它只考虑来自第一个文件的第一组数据。
函数调用是A1p1("specdata","nitrate",70:72)
。
我也粘贴了函数
下面的示例输出$nitrate
[1] NA NA NA NA NA NA NA NA NA NA
[11] NA NA NA NA NA NA NA NA NA NA
[21] NA NA NA NA NA NA NA NA NA NA
.............
$nitrate
[1] NA NA NA NA NA NA NA NA NA NA
[11] NA NA NA NA NA NA NA NA NA NA
[21] NA NA NA NA NA NA NA NA NA NA
............
$nitrate
[1] NA NA NA NA NA NA NA NA NA NA
[11] NA NA NA NA NA NA NA NA NA NA
[21] NA NA NA NA NA NA NA NA NA NA
是否有人可以建议的补救措施?
我正在使用的完整代码如下:
**
A1p1 <- function(directory,pol,id)
{
filename <- list.files(pattern=".csv")
a <- data.frame()
for( i in 1:length(id))
{
data <- read.csv(paste(directory,"/",sprintf('%03d',id[i]),".csv",sep=""),header=T)
a <- c(a,data[pol])
}
if(pollutent=="aa")
{
me <- mean(a$aa,na.rm=T)
}
else
{
me <- mean(a$bb,na.rm=T)
}
return(round(me,digits=3))
}
答案 0 :(得分:0)
c()
这不是组合data.frames的正确方法。你想把行堆叠在一起吗?然后rbind()
是正确的功能。是否要将列添加到现有data.frame?然后cbind
是正确的选择。是否要将data.frames合并为一个公共值?然后merge
将是正确的功能。它根本不清楚你要对这些数据做些什么。
在这里可能不需要看看。你可以做到
mylist<-lapply(paste(directory,"/",sprintf('%03d',id[i]),".csv",sep=""), read.csv,header=T)
获取包含所有data.frames的列表,然后使用
将它们叠加在一起do.call(rbind, mylist)
假设它们都具有相同的列名,并且是您想要的结果。