【问题标题】:The mean of a data frame is not ouputting the right value in R数据帧的平均值未在 R 中输出正确的值
【发布时间】:2014-05-15 03:33:47
【问题描述】:

我有一个情况。我得到的平均值不适用于多个 id,并且也已经解决了一些问题,但正在寻找可能的解决方案的指导。

我的数据在数据框中。

  1. 我在 for 循环之前创建了一个数据框“b”。用于读取文件的 for 循环。
  2. 在 for 循环中,我通过 b
  3. b 的类是一个data.frame
  4. “b”上的名称函数显示一列,该列是函数调用中为污染提供的参数
  5. 当我返回 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)) 
}

【问题讨论】:

  • 欢迎您,但我对您的问题投了反对票。很难看出这里要问什么。我试了一下,可能会在再读几遍后破译,但如果你能充分澄清你的问题会更好。

标签: r dataframe mean


【解决方案1】:

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)

假设它们都有相同的列名,这就是您想要的结果。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-02
    • 1970-01-01
    • 1970-01-01
    • 2016-06-23
    相关资源
    最近更新 更多