r - 如何制作行长不等的数据框?
问题描述
我有一个大数据框,ExprsData,有几个数字和 NA 值。它看起来像这样:
病人 | 基因_A | 基因_C | 基因_D |
---|---|---|---|
病人1 | 12 | 16 | 不适用 |
病人2 | 15 | 不适用 | 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)
但是,当我尝试将我的函数应用于我的整个数据框时,出现以下错误: (function (..., row.names = NULL, check.rows = FALSE, check.names = TRUE, : arguments暗示不同的行数:14、15
我了解我收到此错误消息是因为我的列的长度不同。我知道这是因为在我的函数中,我让它删除了 NA 值。我需要这样做,否则当我稍后在函数中尝试缩放和居中时会遇到很多错误。
有没有办法制作一个列不相等的数据框?一旦它被缩放和居中以避免这个错误,有没有办法将“NA”重新插入我的数据框?或者一种在某些列中插入空白单元格以便它们都可以是相同长度的方法?
解决方案
这是您功能的更好版本,它不会从您的数据中删除任何 NA:
(但是,该函数仍然会触发 的非数值x
,或者在scale
和center
都为 FALSE 的情况下。但人们可能会问自己,为什么比例函数需要比例是或否参数??)
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)
}
}
推荐阅读
- java - JOLT 变换:子对象到顶部对象
- r - 使用 R 进行网页抓取的一些问题
- python - 如何在 Python 中将多个绘图保存为带有名称的单独 png 文件?
- android - 按钮在移动设备上的外观与 android studio 布局视图中的不同
- amazon-web-services - Lambda(私有子网)到 Lambda(公共子网)调用超时
- babeljs - Yarn --link-duplicates 在构建时产生错误
- ruby-on-rails - routes.rb 有问题。没有路线匹配显示操作
- javascript - javascript中是否存在yield_self函数?
- javascript - 有效地获取 javascript 中的最高和最低有效位
- python - 返回指向 Python 数组的 2D Cython 指针