如何基于行条件移除R矩阵特定行(asnipe包数据处理)
处理asnipe交互矩阵冗余数据的两种实现方案
针对你用get_associations_points_tw生成的交互矩阵,提供两种符合需求的R代码实现:
方案1:保留行和≥2的行(过滤自身交互行)
自身交互的行仅对应自身ID的列有1个非零值,行和为1;真实的两两交互行和至少为2。直接通过行和筛选即可:
# 计算每行的行和 row_sums <- rowSums(matrix) # 生成仅包含行和≥2的新矩阵 filtered_matrix1 <- matrix[row_sums >= 2, ] # 若要直接修改原矩阵,替换为以下代码 # row_sums <- rowSums(matrix) # matrix <- matrix[row_sums >= 2, ]
方案2:仅保留无自身交互的两两交互行
如果需要严格排除自身交互(即行中对应自身ID的列值必须为0),同时保证存在至少一个其他个体的交互,可使用以下代码:
# 匹配每行名称对应的列位置(定位自身ID的列) self_col_pos <- match(rownames(matrix), colnames(matrix)) # 筛选条件:自身交互为0,且行和≥2(确保存在其他个体交互) valid_rows <- matrix[cbind(1:nrow(matrix), self_col_pos)] == 0 & rowSums(matrix) >= 2 # 生成过滤后的新矩阵 filtered_matrix2 <- matrix[valid_rows, ] # 直接修改原矩阵的写法 # self_col_pos <- match(rownames(matrix), colnames(matrix)) # valid_rows <- matrix[cbind(1:nrow(matrix), self_col_pos)] == 0 & rowSums(matrix) >= 2 # matrix <- matrix[valid_rows, ]
内容的提问来源于stack exchange,提问作者Addi Lusk
相关产品推荐
相关产品推荐

