r语言 - 在mutate()中使用weighting .mean()来创建行加权均值



我正在努力创建一个新列,它应该被构造为X和Y变量的逐行加权平均数。我想使用weighting .mean()的原因是na。rm功能,我需要为我的目的。

我有数据框架

library(tidyverse)
seed(2021)
df <- tibble(x = rnorm(10,0,5),
y = rnorm(10,0,10))

我试着像这样创建新列:

df <- df %>% mutate(z = weighted.mean(cbind(x,y),cbind(rep(c(0.2,0.8),10))))

但是,这会产生一个充满相同常量的行,因此我似乎没有指定需要逐行操作。我将感激指导之手-谢谢!

/F

试试这个

df <- tibble(x = rnorm(10,0,5),
y = rnorm(10,0,10))
df$z <- df %>% 
rowwise %>%
do(data.frame(
z = weighted.mean(
x = c(.$x, .$y),
w = c(.2, .8)
)
)) %>%
ungroup %>%
magrittr::use_series("z")

df %>% 
mutate( z= df %>% 
rowwise %>% 
do(data.frame(
z = weighted.mean(
x = c(.$x, .$y),
w = c(.2, .8)
)
)))

x       y     z
<dbl>   <dbl>   <dbl>
1  0.176  -1.95   -1.52 
2 -3.33   -6.88   -6.17 
3 -4.08    0.827  -0.154
4  0.609   1.68    1.47 
5  0.327   8.06    6.51 
6 -8.63   -2.12   -3.42 
7 -4.68   -8.52   -7.76 
8  6.49  -13.0    -9.07 
9 -2.95  -25.4   -20.9  
10  2.78    5.36    4.85

你可以做-

library(dplyr)
df %>%
rowwise() %>%
mutate(z = weighted.mean(c(x,y), c(0.8, 0.2))) %>%
ungroup
#      x      y      z
#     <dbl>  <dbl>  <dbl>
# 1 -0.612  -10.8   -2.65
# 2  2.76    -2.73   1.66
# 3  1.74     1.82   1.76
# 4  1.80    15.1    4.46
# 5  4.49    16.0    6.80
# 6 -9.61   -18.4  -11.4 
# 7  1.31    16.2    4.29
# 8  4.58     1.31   3.93
# 9  0.0689  14.8    3.02
#10  8.65    15.1    9.95

或以R为底-

df$z <- apply(df, 1, function(x) weighted.mean(x, c(0.8, 0.2)))

最新更新