R语言中summarise(nAlive=n())代码是否需补充?新手求助
关于dplyr中
summarise(nAlive = n())的疑问解答 Hi Garrett, 很高兴看到你刚接触R就上手tidyverse处理数据啦!先给你吃个定心丸——你写的summarise(nAlive = n())这一行完全满足你的需求,不需要额外补充内容,下面给你拆解清楚:
1. n()在分组统计里的作用
在dplyr的分组操作中,n()是一个专门用来统计当前分组内观测值数量的函数。你前面已经通过filter(!is.na(Lice))筛选掉了Lice列有缺失值的行(这部分应该对应非存活样本),那剩下的每个Cage + Species分组里的行数,正好就是该组的存活样本数,n()直接帮你统计这个数量,赋值给nAlive完全贴合你的需求。
2. 怎么验证结果是否正确?
你可以快速做个小验证:
- 随便选一个
Cage和Species的组合,比如Cage = 1, Species = "Salmon",然后运行:
JulyData %>% filter(Cage == 1, Species == "Salmon", !is.na(Lice)) %>% nrow()
得到的数字应该和Alive表里对应行的nAlive完全一致,这样就能确认你的代码逻辑没问题啦。
3. 可选的替代写法(如果后续需求变化)
如果之后你的数据里新增了专门标识存活状态的列(比如叫Survival,值为TRUE/FALSE或者"Alive"/"Dead"),你也可以用类似这样的写法:
Alive <- JulyData %>% group_by(Cage, Species) %>% summarise(nAlive = sum(Survival == TRUE))
但就你当前的需求和数据处理逻辑来说,用n()已经是最简洁准确的写法了,完全不需要额外补充内容。
附上你提供的完整代码整理版:
library(readxl) library(tidyverse) library(lme4) library(car) library(emmeans) # 读取数据 JulyData <- read_excel("~/R/Cage Data Final 2016 EMV 1.20.xlsx", sheet="7.1.2016") # 数据检查 str(JulyData) summary(JulyData$Lice) # 获取所有笼子和物种组合,初始化起始数量 AllCages <- distinct(JulyData, Cage, Species) AllCages$nStart <- rep(10, nrow(AllCages)) # 统计存活样本数(你的核心代码) Alive <- JulyData %>% filter(!is.na(Lice)) %>% group_by(Cage, Species) %>% summarise(nAlive = n())
内容的提问来源于stack exchange,提问作者Garrett Malone
相关产品推荐
相关产品推荐

