过去两天我一直在使用R,但我对此感到有些困惑。我有一个包含投标人名称和投标的数据框,其中一些投标为空。我无法实现一种动态方式来获取每个唯一出价者的平均出价并将其应用于空单元格。下面的代码行将采用所有唯一出价者的平均出价。我需要做的就是将unique_bid的平均值放在具有相同出价者的空白单元格中。
unique_bid <- aggregate(bid ~ bidder, auction[complete.cases(auction),], mean)
Here是数据框的外观图片。
很抱歉,如果难以解释,请多谢!
答案 0 :(得分:1)
您可以使用ave
。
示例:
df = data.frame(a = c(1,1,1,2,2,2), b=c(1,2,NA,4,5,NA),c= c(1,2,3,4,5,6))
> df
a b c
1 1 1 1
2 1 2 2
3 1 NA 3
4 2 4 4
5 2 5 5
6 2 NA 6
要做:
sel = is.na(df$b)
df$b[sel] = ave(df$b, df$a, FUN = function(x){mean(x, na.rm = T)})[sel]
ave
将在按FUN
分组的同时将功能df$b
应用于df$a
。 sel
将选择df$b
的NA个元素,并将其替换为相应函数的结果。
结果:
> df
a b c
1 1 1.0 1
2 1 2.0 2
3 1 1.5 3
4 2 4.0 4
5 2 5.0 5
6 2 4.5 6