如何提取矩阵指定列的所有非零值生成新矩阵或数据框
提取矩阵/数据框指定列非零值的实现方法
核心逻辑非常简单:先定位到你要提取的目标列,再筛选出该列值不等于0的记录即可,以下给出两种最常用数据分析环境的实现代码。
R 语言实现
首先构造你给出的示例数据:
# 构建示例数据框 raw_df <- data.frame( A = c(1, 2, 0), B = c(3, 4, 0), C = c(0, 0, 3) )
基础R(无第三方依赖)写法
如果你需要输出结果保留二维数据框/矩阵结构,用下面的代码:
# 提取C列非零值,保留数据框结构 new_df <- raw_df[raw_df$C != 0, "C", drop = FALSE]
参数drop = FALSE是用来防止R自动把单列结果降维成向量的,如果你只需要拿到非零值的一维向量,直接写c_non_zero <- raw_df$C[raw_df$C != 0]就行。
tidyverse 流派写法
如果你日常用dplyr做数据处理,可以用更易读的管道写法:
library(dplyr) new_df <- raw_df %>% select(C) %>% filter(C != 0)
针对你给出的示例数据,以上两种写法得到的new_df结果一致,内容为:
C 3 3
注意:如果你的C列存在缺失值NA,请把筛选条件替换为
!is.na(C) & C != 0,避免缺失值导致的筛选异常。
Python (pandas) 实现
如果是pandas数据框结构,实现逻辑完全一致:
import pandas as pd # 构建示例数据 raw_df = pd.DataFrame({ "A": [1, 2, 0], "B": [3, 4, 0], "C": [0, 0, 3] }) # 提取C列非零值,保留DataFrame结构 new_df = raw_df.loc[raw_df["C"] != 0, ["C"]]
内容的提问来源于stack exchange,提问作者mike ropri
相关产品推荐
相关产品推荐

