我有一个数据集,其中包含家庭 ID('id')和家庭拥有的车辆的燃油经济性('mpg')。这是长格式,只有两列“id”和“mpg”。
我正在尝试使用 aggregate() 函数或 ddply() 将以下函数应用于数据:
logratio <- function(data=x, mpg=mpg)
{
if (length(data[mpg])>1) {
ratio <- log(max(data[mpg])/min(data[mpg]))
return(ratio)
}
else return(0)
}
我尝试了以下方法:
mpgdf <- aggregate(mpg~id, FUN=logratio, data=mpgdata)
和
df <- ddply(mpgdata,~id,logratio)
都不工作。
这里的关键是我的理论宽格式将是一个“id”列,每个 id 一行,然后是每辆车的 mpg 列,直到最大车辆数(即,如果拥有最多车辆的房子有三个车辆,'mpg1,'mpg2','mpg3')。我想找到最高燃油经济性与最低燃油经济性之比的自然对数,如果只有一辆车,则返回 0(1 的对数)。
我开始有点沮丧,因为 plyr 和 reshape 似乎都想将列设置为现存的“mpg”列的值,而我希望它们如上所述。
我希望将其作为具有两列的数据框返回 - 每个家庭 ID 的“id”针对“mpglogratio”设置一次,以便我可以将其合并回我拥有的更大数据集。
帮助将不胜感激!
谢谢。