r - 如何避免使用每个元素的函数循环转换矩阵
问题描述
好吧,我有一个矩阵,比如说“A”(5x3)。每列是一个变量,每一行是一个观察值。我的目标是清理 A 中关于分配分位数值的每个变量超过 75% 分位数的那些观察值的数据。
我尝试使用“APPLY”函数定义一个带有向量作为输入的 FUN,但它不起作用。
> A
[,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6
[3,] 3 8 13
[4,] 4 9 14
[5,] 5 10 15
f2 <- function(x1, x2) {
if (x1>x2){
return(x2)} else {
return(x1)
}
}
B <- apply(A, 1:2, FUN = f2, x2=apply(A, 2, quantile, probs=0.75))
我想得到一个这样的矩阵:
> B
[,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6
[3,] 3 8 13
[4,] 4 9 14
[5,] 4 9 14
但我收到了这个警告:
There were 15 warnings (use warnings() to see them)
> B
[,1] [,2] [,3]
[1,] 1 3 Numeric,3
[2,] 2 4 Numeric,3
[3,] 3 Numeric,3 Numeric,3
[4,] 4 Numeric,3 Numeric,3
[5,] Numeric,3 Numeric,3 Numeric,3
有什么建议吗?
解决方案
您只能通过处理列来做到这一点。每列都是一个向量,您可以选择分位数上方的值以用分位数替换它们:
A <- matrix(c(1:5,3,4,8,9,10,5,6,13,14,15),ncol = 3)
apply(A,2,function(col){
col[col > quantile(col,probs = 0.75)] <- quantile(col,probs = 0.75)
col
})
[,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6
[3,] 3 8 13
[4,] 4 9 14
[5,] 4 9 14
推荐阅读
- python - 通过批处理文件运行时,将 python 脚本的输出打印到 Windows 控制台
- python - Pandas 根据日期范围和另一列过滤数据框
- html - 从 React 中的隐藏溢出中弹出
- facebook-graph-api - 获取给定日期的 Instagram 关注者数量
- r - 为什么 r 中关于生成 Gamma 随机变量的代码不返回预期的输出?
- cross-browser - 我应该如何做跨浏览器解决方案?
- powershell - 如何使用 powershell 传递参数?
- python - Python 类 - 存储和引用实例
- python - 如何在两个不同的 Github 存储库中同步一些文件夹?
- oop - 实现相同接口的不同类进入构造函数