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

为何R的summary统计物种计数未排除其他列缺失值,显示一致?

R语言melt后species计数不符合预期的解决办法

执行代码

data<-read.csv("pen.csv",header=TRUE)
head(data)
require(reshape2)
dat<-melt(data=data)
names(dat)<-c("species","weight")
summary(dat)

实际结果

> summary(dat)

|      species     |  weight         |  
|------------------|-----------------|  
| Adelie   :6      | Min.   :181.0   |
| Gentoo   :6      | 1st Qu.:193.0   |
| Chinstrap:6      | Median :202.0   |
|                  | Mean   :202.3   |  
|                  | 3rd Qu.:215.0   | 
|                  | Max.   :216.0   |
|                  | NA's   :3       |

预期结果

|      species     |  weight         |  
|------------------|-----------------|  
| Adelie   :5      | Min.   :181.0   |
| Gentoo   :6      | 1st Qu.:193.0   |
|Chinstrap :4      | Median :202.0   |
|                  | Mean   :202.3   |  
|                  | 3rd Qu.:215.0   | 
|                  | Max.   :216.0   |
|                  | NA's   :3       |

数据集

AdelieGentooChinstrap
181215202
186215193
195215210
NA216198
193215NA
190210NA

问题原因

melt()函数会将原数据的每一行每一列都转换为独立观测,即使对应weight值为NA也会保留该行。原数据共6行,因此每个species的计数都是6,和你预期的排除NA后的计数不符。之前将species转为factor类型无效,因为问题核心是行的保留逻辑,而非数据类型。

解决方法

在melt()之后过滤掉weight为NA的行即可:

data<-read.csv("pen.csv",header=TRUE)
require(reshape2)
dat<-melt(data=data)
names(dat)<-c("species","weight")
# 过滤weight为NA的行
dat <- dat[!is.na(dat$weight), ]
summary(dat)

执行后会得到符合预期的结果:Adelie计数为5,Chinstrap计数为4,Gentoo计数为6。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 21:36:21