r - 如何使用 R 按组有效地将第一行的 NA 替换为 0
问题描述
有没有更好的方法将第一行的 NA 按组替换为 0?这就是例子。谢谢。
x <- matrix(c(NA,NA,2,3,NA,4,NA,NA,6,NA,NA,7),nrow=4)
x <- as.data.table(x)
names(x) <- c("a","b","c")
name <- rep(c("P-1","P-2"),each=2)
x <- cbind(name,x)
x[!duplicated(x$name),] <- replace(x[!duplicated(x$name),],sapply(x[!duplicated(x$name),],is.na),0)
解决方案
我们可以replace
NA
在每组的第一行为所有列取值。
使用data.table
,可以这样做:
library(data.table)
x[, lapply(.SD, function(x) replace(x, seq_along(x) == 1 & is.na(x), 0)), name]
# name a b c
#1: P-1 0 0 6
#2: P-1 NA 4 NA
#3: P-2 2 0 0
#4: P-2 3 NA 7
或与dplyr
:
library(dplyr)
x %>%
group_by(name) %>%
mutate_at(vars(-group_cols()), ~replace(., row_number() == 1 & is.na(.), 0))
推荐阅读
- c++ - Visual Stuido 2010 中的退出代码为 1 的错误 MSB3073
- javascript - 如何将函数从有状态传递到无状态组件?
- docker - Artifactory 中的远程 Docker 存储库行为
- javascript - 在聊天系统中跟踪消息
- ubuntu - 无法在 ubuntu 上运行 Vulkan
- json - 使用邮递员测试 Drools DRL
- gitlab - 如何邀请用户成为 GitLab 存储库的所有者?
- firebase - 如何正确配置 Flutter Firebase Database onEntryChanged 监听器?
- sharepoint - 如何按版本历史记录自动存档
- android - 在片段中的对话片段中显示谷歌地图