【问题标题】:i want to find the mean of a column from several files in R [duplicate]我想从R中的几个文件中找到一列的平均值[重复]
【发布时间】:2016-10-08 12:49:44
【问题描述】:

这是我的代码,它为任何输入提供 NA。请帮助我知道我哪里出错了。(我是初学者)

pollutantmean <- function(directory, pollutant, id=1:332){
  fname <- sprintf("%s/%03d.csv", directory, id)
  ldf <- lapply(fname, read.csv)
  df <- unlist(ldf)
  a <- matrix(df, ncol = 3)
  dfa <- data.frame(a)
  colnames(dfa)<-c("date", "sulfate", "nitrate")
  mn<-mean(dfa[, pollutant],na.rm=TRUE)
  print(mn)
}

【问题讨论】:

  • 最好不要使用print()从函数返回值。

标签: r


【解决方案1】:

最终你想要:

fname <- sprintf("%s/%03d.csv", directory, id)
ldf <- lapply(fname, read.csv)

my.mean <- function(df, pollutant) mean(df[, pollutant], na.rm=TRUE)

pollutant <- "nitrate"  # or "sulfate"
sapply(ldf, my.mean, pollutant) # or
mean(sapply(ldf, my.mean, pollutant))

你也可以选择

mean(unlist(sapply(ldf, '[[', pollutant), na.rm=TRUE))

【讨论】:

  • 嘿!实际上,我想要所有文件中列污染物的一种平均值。上面的代码给了我每个单独文件的列的平均值。
  • @SONALIJHA 我编辑了我的答案。请对更改发表评论。
  • 如果文件长度不同,sapply 会返回一个列表,mean(sapply(ldf, '[[', pollutant), na.rm=TRUE) 会抛出一个错误。我认为您还需要取消列出来处理这个问题:mean(unlist(sapply(ldf, '[[', pollutant)), na.rm=TRUE)。如果我们知道所有文件的长度相同,那么串联均值的均值当然就是单个文件均值的均值
  • @dww 感谢您的评论。你说的对。我将编辑我的答案。
猜你喜欢
  • 2016-10-20
  • 1970-01-01
  • 2020-02-19
  • 1970-01-01
  • 2018-08-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多