R - 分别对每个变量求和或对所有变量求和的差异
R - Differences using sum with each variable separately or sum with all variables together
我快要疯了,因为我正在使用 sum() 函数,但它毫无意义地显示了不同的结果。
我有 4 个数值变量:A、B、M、N。
我还有一个权重变量:W.
如果我做加权和:
sum(df$W * (df$A), na.rm = T) = AR
sum(df$W * df$A, na.rm = T) = AR
结果是一样的
如果我加B:
sum(df$W * (df$A + df$B), na.rm = T) = ABR
sum(df$W * df$A, df$W * df$B, na.rm = T) = ABR
结果是一样的
如果我加M:
sum(df$W * (df$A + df$B + df$M), na.rm = T) = ABMR1
sum(df$W * df$A, df$W * df$B, df$W * df$M, na.rm = T) = ABMR2
结果不一样了。
如果我加N:
sum(df$W * (df$A + df$B + df$M + df$N), na.rm = T) = ABMNR1
sum(df$W * df$A, df$W * df$B, df$W * df$M, df$W * df$N, na.rm = T) = ABMNR2
结果不一样
看来 M and/or N 变量有问题。但是,如果我开始添加 M 和 N 变量...:
sum(df$W * (df$M), na.rm = T) = MR
sum(df$W * df$M, na.rm = T) = MR
结果是一样的
如果我加N:
sum(df$W * (df$M + df$N), na.rm = T) = MNR
sum(df$W * df$M, df$W * df$N, na.rm = T) = MNR
结果是一样的
现在,如果我添加 A:
sum(df$W * (df$M + df$N + df$A), na.rm = T) = MNA1
sum(df$W * df$M, df$W * df$N, df$W * df$A, na.rm = T) = MNA2
结果不一样了。
如果我加B:
sum(df$W * (df$M + df$N + df$A + df$B), na.rm = T) = MNAB1
sum(df$W * df$M, df$W * df$N, df$W * df$A, df$W * df$B, na.rm = T) = MNAB2
结果不一样
现在看来问题出在A或B变量上。
这怎么可能?如果我将 W 变量乘以变量之和(第一种方式),或者如果我添加不同的变量(第二种方式),有什么不同吗?
非常感谢您提供的任何帮助!
考虑这个最小的例子:
df<-data.frame(W=c(1,2),A=c(NA,3),B=c(4,NA))
让我们检查一下:
sum(df$W*df$A,na.rm=TRUE)
#[1] 6
sum(df$W*df$B,na.rm=TRUE)
#[1] 4
sum(df$W*df$B,df$W*df$A,na.rm=TRUE)
#[1] 10
sum(df$W*(df$B+df$A),na.rm=TRUE)
#[1] 0
你应该弄清楚是怎么回事。提示:
df$W*(df$B+df$A)
#[1] NA NA
这是由于 NA。这是说明情况的示例:
x <- c(1,2,NA)
y <- c(1,NA,3)
z <- c(2,3,4)
s1 <- sum(x*(y+z), na.rm = T)
s2 <- sum(x*y,x*z, na.rm = T)
产生 s1 = 3 和 s2 = 9。但是,如果没有 NA
,则总和相同。让我们看看会发生什么:
- 对于
s1
,总和 (y+z)
产生向量 3 NA 7
。与向量x相乘,得到一个向量3 NA NA
。不包括 NA 的总和是 3.
- 对于
s2
,乘积 x * y
产生 1 NA NA
,乘积 x*z
产生 2 6 NA
。排除NA
s,这些向量之和为9.
简而言之,如果 NA
存在,则通常代数中已知的分配 属性 不成立。
我快要疯了,因为我正在使用 sum() 函数,但它毫无意义地显示了不同的结果。 我有 4 个数值变量:A、B、M、N。 我还有一个权重变量:W.
如果我做加权和:
sum(df$W * (df$A), na.rm = T) = AR
sum(df$W * df$A, na.rm = T) = AR
结果是一样的
如果我加B:
sum(df$W * (df$A + df$B), na.rm = T) = ABR
sum(df$W * df$A, df$W * df$B, na.rm = T) = ABR
结果是一样的
如果我加M:
sum(df$W * (df$A + df$B + df$M), na.rm = T) = ABMR1
sum(df$W * df$A, df$W * df$B, df$W * df$M, na.rm = T) = ABMR2
结果不一样了。
如果我加N:
sum(df$W * (df$A + df$B + df$M + df$N), na.rm = T) = ABMNR1
sum(df$W * df$A, df$W * df$B, df$W * df$M, df$W * df$N, na.rm = T) = ABMNR2
结果不一样
看来 M and/or N 变量有问题。但是,如果我开始添加 M 和 N 变量...:
sum(df$W * (df$M), na.rm = T) = MR
sum(df$W * df$M, na.rm = T) = MR
结果是一样的
如果我加N:
sum(df$W * (df$M + df$N), na.rm = T) = MNR
sum(df$W * df$M, df$W * df$N, na.rm = T) = MNR
结果是一样的
现在,如果我添加 A:
sum(df$W * (df$M + df$N + df$A), na.rm = T) = MNA1
sum(df$W * df$M, df$W * df$N, df$W * df$A, na.rm = T) = MNA2
结果不一样了。
如果我加B:
sum(df$W * (df$M + df$N + df$A + df$B), na.rm = T) = MNAB1
sum(df$W * df$M, df$W * df$N, df$W * df$A, df$W * df$B, na.rm = T) = MNAB2
结果不一样
现在看来问题出在A或B变量上。 这怎么可能?如果我将 W 变量乘以变量之和(第一种方式),或者如果我添加不同的变量(第二种方式),有什么不同吗?
非常感谢您提供的任何帮助!
考虑这个最小的例子:
df<-data.frame(W=c(1,2),A=c(NA,3),B=c(4,NA))
让我们检查一下:
sum(df$W*df$A,na.rm=TRUE)
#[1] 6
sum(df$W*df$B,na.rm=TRUE)
#[1] 4
sum(df$W*df$B,df$W*df$A,na.rm=TRUE)
#[1] 10
sum(df$W*(df$B+df$A),na.rm=TRUE)
#[1] 0
你应该弄清楚是怎么回事。提示:
df$W*(df$B+df$A)
#[1] NA NA
这是由于 NA。这是说明情况的示例:
x <- c(1,2,NA)
y <- c(1,NA,3)
z <- c(2,3,4)
s1 <- sum(x*(y+z), na.rm = T)
s2 <- sum(x*y,x*z, na.rm = T)
产生 s1 = 3 和 s2 = 9。但是,如果没有 NA
,则总和相同。让我们看看会发生什么:
- 对于
s1
,总和(y+z)
产生向量3 NA 7
。与向量x相乘,得到一个向量3 NA NA
。不包括 NA 的总和是 3. - 对于
s2
,乘积x * y
产生1 NA NA
,乘积x*z
产生2 6 NA
。排除NA
s,这些向量之和为9.
简而言之,如果 NA
存在,则通常代数中已知的分配 属性 不成立。