【发布时间】:2017-12-19 23:53:22
【问题描述】:
我正在尝试根据两类数据之间的连续变量对数据框进行排序。具体来说,我想对连续变量进行排序(降序),但将相似类型的变量保留在一起。这是一个例子:
pets <- data.frame(animal = c("dog", "dog", "dog", "cat", "cat", "fish", "fish", "fish"),
breed = c("retriever", "husky", "husky", "grey", "white", "guppy", "betta", "betta"),
count = c(4, 3, 7, 8, 9, 2, 12, 1))
现在,数据框未排序。我想对其进行排序,以使具有最高平均值 count 的 breeds 首先出现,但所有 breeds(和 animals)仍然组合在一起。如果我根据breed 对框架进行排序,则会丢失count 的正确顺序,反之亦然。即使我都这样尝试:
pets[with(pets, order(breed, -count)), ]
输出未正确排序。我浏览了一些split-apply-combine tutorials,但我只能找到试图将一组数据放在一起的那些,而不是我的数据中的两组。
现在,这是我所拥有的最好的:
split_pets <- split(pets, pets$animal)
unlist(lapply(split_pets, function(x) sort(with(x, tapply(count, breed, mean)), decreasing = TRUE)))
返回
cat.white cat.grey dog.husky dog.retriever fish.betta fish.guppy
9.0 8.0 5.0 4.0 6.5 2.0
当然,我的输入顺序是正确的。但实际上我什至不在乎手段,我只需要根据此对 original 数据框进行排序。接下来是根据品种再次拆分它的兔子洞,但随后我将根据列表列表的数据框列进行排序。这听起来太复杂了。我也尝试过计数 ordering,然后将其从 dplyr 传递到 group_by(),但这并没有让我比现在更进一步。
感谢您的帮助!
【问题讨论】: