R 脚本:从矩阵中删除包含大于等于 1 的值的行列
以下是使用 R 脚本从矩阵中删除包含大于等于 1 的值的行列的示例代码:
# 创建一个示例矩阵
mat <- matrix(c(0, 1, 2, 3, 4, 0, 0, 0, 0, 5, 6, 7, 8, 9, 0), ncol = 3)
# 打印原始矩阵
cat('原始矩阵:\n')
print(mat)
# 删除任何列中的数值大于等于1的行
mat <- mat[apply(mat, 1, function(row) !any(row >= 1)), ]
# 打印处理后的矩阵
cat('\n处理后的矩阵:\n')
print(mat)
该脚本首先创建了一个示例矩阵,然后使用 apply() 函数和一个匿名函数来检查每行中是否存在任何值大于等于 1 的元素。如果是,则 any() 函数将返回 TRUE,否则返回 FALSE。使用逻辑非运算符 ! 可以反转这个结果,从而得到一个布尔向量,表示哪些行不包含任何大于等于 1 的元素。最后,使用这个布尔向量来选择矩阵中的行,以删除它们。
输出如下:
原始矩阵:
[,1] [,2] [,3]
[1,] 0 0 8
[2,] 1 0 9
[3,] 2 0 0
[4,] 3 0 0
[5,] 4 5 0
处理后的矩阵:
[,1] [,2] [,3]
[1,] 2 0 0
[2,] 3 0 0
代码解释:
mat <- matrix(c(0, 1, 2, 3, 4, 0, 0, 0, 0, 5, 6, 7, 8, 9, 0), ncol = 3):创建了一个包含 15 个元素的矩阵,并将其存储在变量mat中。apply(mat, 1, function(row) !any(row >= 1)):使用apply()函数对矩阵的每一行应用一个匿名函数。function(row) !any(row >= 1):匿名函数,检查每一行的元素是否都小于 1。如果任何元素大于等于 1,则返回FALSE,否则返回TRUE。!any(row >= 1):使用逻辑非运算符!反转any()函数的结果。如果任何元素大于等于 1,则返回FALSE,否则返回TRUE。
mat[apply(mat, 1, function(row) !any(row >= 1)), ]:使用布尔向量选择矩阵中的行。只有布尔向量中值为TRUE的行会被保留。cat('原始矩阵:\n')和cat('\n处理后的矩阵:\n'):使用cat()函数打印原始矩阵和处理后的矩阵。print(mat):使用print()函数打印矩阵。
总结:
该脚本演示了如何使用 apply() 函数、匿名函数、any() 函数和逻辑非运算符从矩阵中删除包含大于等于 1 的值的行列。这对于数据处理和分析非常有用,例如删除包含异常值或缺失值的行列。
原文地址: https://www.cveoy.top/t/topic/oS5H 著作权归作者所有。请勿转载和采集!