首页 > 解决方案 > 如何使用 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)

标签: r

解决方案


我们可以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))

推荐阅读