R-如何对行中的一些但不是所有变量执行算术运算,忽略NAs

R-如何对行中的一些但不是所有变量执行算术运算,忽略NAs,r,dataframe,R,Dataframe,假设我有一个data.frame: 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) a定义您自己的运算符: > `%+%` <- function(e1, e2) {e1[is.na(e1)] <- 0; e2[is.na(e2)] <- 0; return(e1 + e2)} > `%-%` <- function

假设我有一个data.frame:

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)

a定义您自己的运算符:

> `%+%` <- 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

`%+%`哇,我不知道你能做到!你能解释一下操作符定义的元素是什么意思吗?在我看来,e1指的是左除法符号,e2指的是右除法符号,在执行运算符时,除法符号会将下一个对象拉到左边和右边,并将它们作为e1和e2?在控制台中键入
+
(被反勾包围),以查看
+
只是一个函数。这些对
+
-
的修改只是根据它们的原始函数定义使用建模。谢谢!我看到
+
函数(e1,e2)。Primitive(“+”
),它并没有告诉我如何使用花括号中的部分来定义新操作符。如果e1和e2缺失,我会将它们设置为0,但是操作符从哪里获取e1和e2,以及
return()
do做什么?@iraserd这些都是函数的形式参数,也就是说,它们都只是基本的函数定义。看一看。
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
> `%+%` <- 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