如何有效地替换第一排';s NA与0按R分组
是否有更好的方法按组将第一行的NA替换为0? 这就是一个例子。谢谢如何有效地替换第一排';s NA与0按R分组,r,R,是否有更好的方法按组将第一行的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[!du
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)
x我们可以为所有列替换每组第一行的NA
值
使用数据表
,可通过以下方式完成:
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))
另一个数据。表选项是:
x[name!=shift(name, fill=""), c("a","b","c") := {
s <- copy(.SD)
s[is.na(.SD)] <- 0
s
}, .SDcols=a:c]
x[name!=shift(name,fill=“”),c(“a”,“b”,“c”):={
s您可以存储!重复的(x$name)
,无需sapply
。按组将第一行的NA替换为0的基本解决方案:
i
i <- !duplicated(x$name)
x[i,] <- replace(x[i,], is.na(x[i,]), 0)
x
# 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