子集数据帧,基于min()

时间:2014-07-16 13:58:08

标签: r function

我正在尝试建立一个函数,它使用y参数对数据帧进行子集化,然后计算y.p列的最小值。然后,使用y.p列的最小值来对与列c相关的相同数据帧进行子集化。

b <- function (y) {
    df<- read.csv("C:/../.csv", colClasses="character")
    y.p<-paste("d",y, sep=".")
    minimum=min(min.outcome<-as.numeric(data.frame[,y.p]),na.rm=T)
    df[df$y.p==minimum,"c"]
}

这是数据框的一部分:https://www.dropbox.com/s/y3152d1ki1ot232/Classeur2.csv

运行该功能后,我得到了character(0)

我已经逐行测试了功能,错误似乎在最后一行..

你可以帮我解决这个问题吗?

谢谢,

1 个答案:

答案 0 :(得分:0)

好吧说实话,很难说出你想要完成什么,但我认为你希望能够将字符值传递给y,如果您正在阅读的数据有多个以d.开头的列?无论如何,如果这是不正确的,请逐步完成你想要做的事情。

Foo <- function(y){
  df <- read.csv(
    file="G:/Classeur2.csv",
    header=TRUE,
    colClasses=c(
      'numeric',
      rep('character',4))
  )
  ##
  df[,3:5] <- sapply(3:5, function(X){
    df[,X] <- as.numeric(
      gsub("Not Available",NA,df[,X])
    ) 
  })
  ##
  y.p <- paste("d",y,sep=".")
  ypCol <- match(y.p,names(df))
  ##
  minimum <- min(
    df[,ypCol],
    na.rm=TRUE
  )
  ##
  dOut <- df[df[,ypCol]==minimum,"c"]
  dOut <- dOut[!is.na(dOut)]
  return(dOut)
}
##
Foo(y="y")
## [1] "HOSPITAL SYSTEM"