如果缺少权重,则按加权平均值或简单平均值聚合列
Aggregate Columns by weighted average or simple average if weight is missing
我正在尝试聚合数据框的某些列。在我的数据框中,每一列对应一个行业,每一行对应一个特定的国家。理想情况下,我想按加权平均值聚合某些列。然而,对于一小部分,权重丢失了。在这种情况下,我希望 R 将按简单平均值为这个国家汇总行业。来自数据框的片段(这些是其他列的示例权重)
| Mining | Food | weight85| weight90.93|
|:----------:|-- -----:|---------:|------------|
| 0.9608709| 0.8839236| 0.2738525| 0.1943577|
| 0.6445055| 0.8483874| 0.2958678| 0.1043844|
| 0.6977353| 0.9449249| NA| NA|
| 0.7970192| 0.5941056| 0.2324452| 0.1904089|
| 0.7261323| 0.6333187| NA| NA|
| 0.9959837| 1.0101725| 0.3872314| 0.1628354|
我计算缺失值问题时的加权平均值如下:
GGPC$mining.weighted <- GGPC$weight85*GGPC$Mining
GGPC$food.weighted <- (1-GGPC$weight85)*GGPC$food
GGPC$food.mining<- rowSums(GGPC[,54:55], na.rm=T)
基于 mts 提供的答案。我想出了以下解决方案的解决方案,该解决方案为一行计算简单平均值或加权平均值。
if(sum(is.na(DF[1,37])>0)) {1/2*DF[1,5]+1/2*DF[1,6]}
else { DF[1,37]*GGPC[1,5]+(1-DF[1,37])*DF[1,6]}
并进一步遍历数据框的行
DF$data.column.agg <- 0
for (i in 1:length(DF)) {
DF[i,*data.column.agg*] <- if(sum(is.na(DF[i,*weight column*])>0)) {*simple average* }
else {DF[i,*weight column*]*GGPC[i,*data column1*]+(1-DF[i,*weight column*])*GGPC[i,*data column2*]}
}
我正在尝试聚合数据框的某些列。在我的数据框中,每一列对应一个行业,每一行对应一个特定的国家。理想情况下,我想按加权平均值聚合某些列。然而,对于一小部分,权重丢失了。在这种情况下,我希望 R 将按简单平均值为这个国家汇总行业。来自数据框的片段(这些是其他列的示例权重)
| Mining | Food | weight85| weight90.93|
|:----------:|-- -----:|---------:|------------|
| 0.9608709| 0.8839236| 0.2738525| 0.1943577|
| 0.6445055| 0.8483874| 0.2958678| 0.1043844|
| 0.6977353| 0.9449249| NA| NA|
| 0.7970192| 0.5941056| 0.2324452| 0.1904089|
| 0.7261323| 0.6333187| NA| NA|
| 0.9959837| 1.0101725| 0.3872314| 0.1628354|
我计算缺失值问题时的加权平均值如下:
GGPC$mining.weighted <- GGPC$weight85*GGPC$Mining
GGPC$food.weighted <- (1-GGPC$weight85)*GGPC$food
GGPC$food.mining<- rowSums(GGPC[,54:55], na.rm=T)
基于 mts 提供的答案。我想出了以下解决方案的解决方案,该解决方案为一行计算简单平均值或加权平均值。
if(sum(is.na(DF[1,37])>0)) {1/2*DF[1,5]+1/2*DF[1,6]}
else { DF[1,37]*GGPC[1,5]+(1-DF[1,37])*DF[1,6]}
并进一步遍历数据框的行
DF$data.column.agg <- 0
for (i in 1:length(DF)) {
DF[i,*data.column.agg*] <- if(sum(is.na(DF[i,*weight column*])>0)) {*simple average* }
else {DF[i,*weight column*]*GGPC[i,*data column1*]+(1-DF[i,*weight column*])*GGPC[i,*data column2*]}
}