我有两组数据框,第一组是:
df1 = subset(mtcars, select="gear")
head(df1)
gear
Mazda RX4 4
Mazda RX4 Wag 4
Datsun 710 4
Hornet 4 Drive 3
Hornet Sportabout 3
第二组的格式如下:
df2 = t(mtcars)[1:4,]
head(df2)
Mazda RX4 Mazda RX4 Wag Datsun 710 Hornet 4 Drive Hornet Sportabout
mpg 21 21 22.8 21.4 18.7
cyl 6 6 4.0 6.0 8.0
disp 160 160 108.0 258.0 360.0
hp 110 110 93.0 110.0 175.0
df1
的行名称是df2
的列名。
我想将gear
中df1
的所有汽车作为一组。然后仅针对汽车计算mpg
和disp
的平均值,然后根据平均值从高到低对各组进行排序。
在这种情况下,预期结果将是(因为gear 3
的车辆mpg
和disp
的平均值高于gear 4
的车辆平均值:< / p>
Hornet 4 Drive Hornet Sportabout Mazda RX4 Mazda RX4 Wag Datsun 710
mpg 21.4 18.7 21 21 22.8
cyl 6.0 8.0 6 6 4.0
disp 258.0 360.0 160 160 108.0
hp 110.0 175.0 110 110 93.0
我希望你清楚这一点。我不知道如何根据群组的平均值将gear
的群组(df1
)应用于df2
并命令df2
。谢谢!
答案 0 :(得分:1)
首先,我会再次转置df2
并将df1
与row.names
合并。
tdf2 <- t(df2)
dfmerge <- merge(df1, tdf2, by = "row.names")
然后使用dplyr
计算按gear
分组的平均值+显示,以及按从最高平均值到最低值的降序排列汽车。
m.mpg.disp <- dfmerge %>% group_by(gear) %>%
mutate(mean.mpg.disp = mean(mpg + disp)) %>%
arrange(desc(mean.mpg.disp))
最后再次转置数据。
finaldf <- as.data.frame(t(m.mpg.disp))
要获得与您的数据框完全相同的数据框,可以使用finaldf
的第一行作为变量名称,并删除与gear
和mean.mpg.disp
对应的行(平均值+差值之和。
names(finaldf) <- as.matrix(finaldf[1, ])
finaldf <- finaldf[-c(1,2,7), ]
finaldf[] <- lapply(finaldf, function(x) type.convert(as.character(x)))
finaldf
我从php-fpm
借来的最后一步结果(只显示前三列):
AMC Javelin Cadillac Fleetwood Camaro Z28
mpg 15.2 10.4 13.3
cyl 8.0 8.0 8.0
disp 304.0 472.0 350.0
hp 150.0 205.0 245.0