This question already has an answer here:
Weighted mean by row
(1个答案)
2年前关闭。
假设我有以下数据框:
我想向数据帧添加加权均值,当它们存在时将其丢弃。例如,在第一行中,我们仅采用V1和W1来计算加权平均值。
我的最终数据框将如下所示:
请注意,加权平均值的计算方式如下:
Wmean =(V1 * W1 + V2 * W2 + V3 * W3)/(W1 + W2 + W3)
(1个答案)
2年前关闭。
假设我有以下数据框:
df <- as.data.frame(rbind(c(5, NA, NA, 1, NA, NA),
c(NA, 2, 2, NA, 0.5, 0.5),
c(NA, NA, NA, NA, NA, NA),
c(1, 1, 1, 0.33, 0.33, 0.33)))
colnames(df) <- c("V1", "V2", "V3", "W1", "W2", "W3")
我想向数据帧添加加权均值,当它们存在时将其丢弃。例如,在第一行中,我们仅采用V1和W1来计算加权平均值。
我的最终数据框将如下所示:
V1 V2 V3 W1 W2 W3 Wmean
1 5 NA NA 1 NA NA 5
2 NA 2 2 NA 0.5 0.5. 2
3 NA NA NA NA NA NA NA
4 1 1 1 .33 .33 .33 1
请注意,加权平均值的计算方式如下:
Wmean =(V1 * W1 + V2 * W2 + V3 * W3)/(W1 + W2 + W3)
最佳答案
我们可以分别收集带有“V”和“W”的列的索引,然后为每一行收集apply
,weighted.mean
,而忽略NA
值。
V_index <- startsWith(names(df), "V")
W_index <- startsWith(names(df), "W")
df$WMean <- apply(df, 1, function(x)
weighted.mean(x[V_index], x[W_index], na.rm = TRUE))
df
# V1 V2 V3 W1 W2 W3 WMean
#1 5 NA NA 1.00 NA NA 5
#2 NA 2 2 NA 0.50 0.50 2
#3 NA NA NA NA NA NA NaN
#4 1 1 1 0.33 0.33 0.33 1
关于r - 计算加权平均值时处理缺失值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51186439/
10-12 19:52