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

R中colSums处理DataFrame空值与NA值异常问题排查

R中统计空字符串时数值列出现NA的解决方法

问题描述

处理trips_2023数据集时,想要统计各列中空字符串("")与NA值的数量,使用了以下代码:

empty_count <- colSums(trips_2023 == "")
na_count <- colSums(is.na(trips_2023))

# 创建结果数据集
available_data_df <- data.frame(
  empty_count = empty_count,
  na_count = na_count
)

# 打印数据集
print(available_data_df)

得到输出:

empty_count na_count
ride_id                     0       0
rideable_type               0       0
started_at                  0       0
ended_at                    0       0
start_station_name     875716       0
start_station_id       875848       0
end_station_name       929202       0
end_station_id         929343       0
start_lat                   0       0
start_lng                   0       0
end_lat                    NA    6990
end_lng                    NA    6990
member_casual               0       0

困惑点:end_lat和end_lng列的空字符串统计结果为NA,但Power BI交叉验证显示这些列存在null值,希望让这类列的空字符串统计结果显示为0。

原因分析

end_lat和end_lng是数值型列,数值型数据中无法存储空字符串("")。当执行trips_2023 == ""时,数值型元素与空字符串比较会返回NA,而colSums函数遇到NA时默认会返回NA,不会忽略这些值,因此最终统计结果显示为NA。

另外,Power BI中的"null"对应R中的NA值,这部分已经被na_count正确统计。

解决方案

有两种简单的修改方式,确保数值型列的空字符串统计结果显示为0:

方式1:统计时忽略NA值

在colSums中添加na.rm = TRUE参数,忽略比较产生的NA值,直接统计有效结果:

empty_count <- colSums(trips_2023 == "", na.rm = TRUE)
na_count <- colSums(is.na(trips_2023))

available_data_df <- data.frame(
  empty_count = empty_count,
  na_count = na_count
)

print(available_data_df)

方式2:按列类型针对性统计

更严谨的方式是先判断列的类型,仅对字符型列统计空字符串,非字符型列直接返回0:

empty_count <- sapply(trips_2023, function(col) {
  if (is.character(col)) {
    sum(col == "", na.rm = TRUE)
  } else {
    0
  }
})

na_count <- colSums(is.na(trips_2023))

available_data_df <- data.frame(
  empty_count = empty_count,
  na_count = na_count
)

print(available_data_df)

两种方式都能让end_lat和end_lng的empty_count显示为0,同时不影响其他字符型列的统计结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 06:23:23