如何制作行长不等的数据框?

How do you make a data frame with unequal row lengths?

我有一个大型数据框 ExprsData,其中包含多个数值和 NA 值。它看起来像这样:

Patient Gene_A Gene_C Gene_D
patient1 12 16 NA
patient2 15 NA 20

我的数据框有 15 行和 14 列。

我创建了一个函数,用于缩放数据框中的值并将其居中:

MyScale <- function (x, scale, center){
  removena <- x[!is.na(x)] #remove the NA values 
  meanofdata <- mean(removena) #calc the mean 
  stdofdata <- sd(removena) #calc the std
  
  
if (scale==TRUE){ #if scale is true
  calcvec <- (removena - meanofdata)/stdofdata 
  return(calcvec)
}else if (center ==TRUE){ #if vec is true 
  centervec <- removena - meanofdata
  return(centervec)
}
} 

我通过 运行 像这样在我的数据框的单个列中测试我的函数:

MyScale (ExprsData$Gene_C, scale = TRUE, center = TRUE)

效果很好!

接下来,我希望能够将我的函数应用于我的整个数据框,将其输出为数据框,将其分配给一个对象,然后另存为 csv。

为此我尝试了这个:

ExprsDataScaled <- as.data.frame(lapply(ExprsData, function(x) MyScale(x = x, scale = TRUE, center = TRUE)))
write.csv(ExprsDataScaled,"?path//filename.csv", row.names = TRUE)

但是,当我尝试将我的函数应用于我的整个数据框时,出现以下错误:Error in (function (..., row.names = NULL, check.rows = FALSE , check.names = 真, : 参数表示不同的行数:14、15

我知道我收到此错误消息是因为我的专栏长度不同。我知道这是因为在我的函数中,我让它删除了 NA 值。我需要这样做,否则我 运行 稍后在函数中尝试缩放和居中时会遇到很多错误。

有没有办法制作具有不等列的数据框?有没有办法在缩放和居中后将“NA”重新插入我的数据框中以避免此错误?或者在某些列中插入空白单元格以便它们的长度都相同的方法?

这是您函数的更好版本,它不会从您的数据中删除任何 NA:

(但是,对于 x,或者在 scalecenter 都为 FALSE 的情况下,该函数仍然会在非数值上跳闸。但是可以问自己为什么scale 函数需要一个 scale yes or no parameter??)

MyScale <- function (x, scale, center){
  meanofdata <- mean(x, na.rm = TRUE)
  stdofdata <- sd(x, na.rm = TRUE)
  
  if (scale==TRUE){
    calcvec <- (x - meanofdata)/stdofdata 
    return(calcvec)
  }else if (center ==TRUE){
    centervec <- x - meanofdata
    return(centervec)
  }
}