计算两个数据表的总和时,NA+n=NA
。
> dt1 <- data.table(Name=c("Joe","Ann"), "1"=c(0,NA), "2"=c(3,NA))
> dt1
Name 1 2
1: Joe 0 3
2: Ann NA NA
> dt2 <- data.table(Name=c("Joe","Ann"), "1"=c(0,NA), "2"=c(2,3))
> dt2
Name 1 2
1: Joe 0 2
2: Ann NA 3
> dtsum <- rbind(dt1, dt2)[, lapply(.SD, sum), by=Name]
> dtsum
Name 1 2
1: Joe 0 5
2: Ann NA NA
我不想用0替换所有NA。我想要的是NA+NA=NA
和NA+n=n
以获得以下结果:
Name 1 2
1: Joe 0 5
2: Ann NA 3
这是如何在R中完成的?
更新:删除了dt1中的拼写错误
答案 0 :(得分:10)
您可以根据需要定义自己的功能
plus <- function(x) {
if(all(is.na(x))){
c(x[0],NA)} else {
sum(x,na.rm = TRUE)}
}
rbind(dt1, dt2)[,lapply(.SD, plus), by = Name]
答案 1 :(得分:4)
dtsum <- rbind(dt1, dt2)[, lapply(.SD, function(x) ifelse(all(is.na(x)), as.numeric(NA), sum(x, na.rm=T))), by=Name]
(包括@ Arun的建议)
na.rm=TRUE
非常有用,可以记住