在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
相关产品推荐
相关产品推荐

