You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在R语言中如何统计dataframe每行非NA值或NA值的列数

实现方法

R语言环境实现

直接用rowSums()结合is.na()即可完成统计:

  • 统计每行有效值列数:对is.na(df)的结果取反后按行求和,非NA值会被判定为TRUE(对应数值1),求和结果就是非NA的总数量
  • 统计每行NA列数:直接对is.na(df)的结果按行求和即可

示例代码如下:

# 构造示例DataFrame
df <- data.frame(
  xxx2 = c(0.12, NA, NA, 0.11, NA, 0.12, 0.12, 0.12, NA, NA, 0.12),
  xxx3 = c(0.14, NA, NA, 0.13, NA, 0.12, 0.12, 0.12, NA, NA, 0.12),
  xxx5 = c(0.17, NA, NA, 0.16, 0.15, 0.14, 0.15, 0.14, NA, NA, 0.14),
  xxx6 = rep(NA, 11),
  xxx7 = c(1.42, NA, NA, 1.38, 1.36, 1.23, 1.27, 1.24, NA, NA, 1.29),
  row.names = c(3000,3001,3002,3003,3004,3005,3006,3007,3008,3009,3010)
)

# 统计每行有效值列数
df$Number <- rowSums(!is.na(df))
# 如果只需要保留统计结果列,执行下面的代码即可
# df <- df["Number", drop=FALSE]

Python Pandas环境实现

Pandas自带的count()方法指定轴参数为1,就可以直接按行统计非空值数量:

import pandas as pd
import numpy as np

# 构造示例DataFrame
data = {
    "xxx2": [0.12, np.nan, np.nan, 0.11, np.nan, 0.12, 0.12, 0.12, np.nan, np.nan, 0.12],
    "xxx3": [0.14, np.nan, np.nan, 0.13, np.nan, 0.12, 0.12, 0.12, np.nan, np.nan, 0.12],
    "xxx5": [0.17, np.nan, np.nan, 0.16, 0.15, 0.14, 0.15, 0.14, np.nan, np.nan, 0.14],
    "xxx6": [np.nan]*11,
    "xxx7": [1.42, np.nan, np.nan, 1.38, 1.36, 1.23, 1.27, 1.24, np.nan, np.nan, 1.29]
}
df = pd.DataFrame(data, index=[3000,3001,3002,3003,3004,3005,3006,3007,3008,3009,3010])

# 按行统计有效值列数,输出符合要求的结果表
res = df.count(axis=1).to_frame(name="Number")

内容的提问来源于stack exchange,提问作者eBopBob

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 11:24:06