为何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 |
数据集
| Adelie | Gentoo | Chinstrap |
|---|---|---|
| 181 | 215 | 202 |
| 186 | 215 | 193 |
| 195 | 215 | 210 |
| NA | 216 | 198 |
| 193 | 215 | NA |
| 190 | 210 | NA |
问题原因
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
相关产品推荐
相关产品推荐

