gpt4 book ai didi

R - 如何对行上的一些但不是所有变量执行算术运算,省略 NA

转载 作者:行者123 更新时间:2023-12-02 00:00:09 26 4
gpt4 key购买 nike

假设我有一个数据框:

a <- c(1,2,3,4,5)
b <- c(0,1,NA,3,4)
c <- c(9,10,11,NA,13)

df <- data.frame(a,b,c)

我设法编写了一个自定义函数,我可以使用它来对行中的某些变量求和,同时忽略 NA(在这种情况下,我对所有变量求和,但想象一个大数据框,我只需要将一个几个变量):

sum.df.na.rm <- function(x) {
rowSums(df[,x], na.rm = TRUE)
}

df$d <- sum.df.na.rm(c("a","b","c"))

> df
a b c d
1 0 9 10
2 1 10 13
3 NA 11 14
4 3 NA 7
5 4 13 22

现在假设我想从 a 中减去 b,然后添加 c,同时仍然忽略 NA。我能做到:

df$bneg <- df$b * (-1)
df$e <- sum.df.na.rm(c("a","bneg","c"))

> df
a b c d bneg e
1 0 9 10 0 10
2 1 10 13 -1 11
3 NA 11 14 NA 14
4 3 NA 7 -3 1
5 4 13 22 -4 14

但必须将 b 乘以 (-1) 才能在 sum.df.na.rm 函数中减去它,这对我来说似乎效率很低。

如果不使用中间变量 bneg,你会怎么做?

最佳答案

定义您自己的运算符:

> `%+%` <- function(e1, e2) {e1[is.na(e1)] <- 0; e2[is.na(e2)] <- 0; return(e1 + e2)}
> `%-%` <- function(e1, e2) {e1[is.na(e1)] <- 0; e2[is.na(e2)] <- 0; return(e1 - e2)}
> within(df, e <- a %-% b %+% c)
a b c e
1 1 0 9 10
2 2 1 10 11
3 3 NA 11 14
4 4 3 NA 1
5 5 4 13 14

关于R - 如何对行上的一些但不是所有变量执行算术运算,省略 NA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21905075/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com