按另一列的级别列出一列的子级别

listing sublevels of one column by the levels of other column

这个问题可能已经在这个网站的某处讨论过,但我经过多次搜索后找不到它。 假设我的数据框只有 2 列,可以使用以下代码生成

df=data.frame(brand=c('Audi','BMW','Audi','Toyota','Audi','Toyota'),
Model=c('A3','x', 'A4','Corolla','A5','Camry'))

现在我有兴趣了解每个品牌有哪些可用型号。我不想总结或意味着什么。这应该是一个简单的解决方案,但我找不到它。

我能找到的最好的是使用 reshape2 包中的 dcast。我做

dcast(df,brand+Model~.)

我明白了

   brand   Model       .
1   Audi      A3      A3
2   Audi      A4      A4
3   Audi      A5      A5
4    BMW       x       x
5 Toyota   Camry   Camry
6 Toyota Corolla Corolla  

前两列正是我想要的,但我认为我不必要地生成了第三列,然后又丢弃了第三列。此外,有可能无需任何额外的库即可完成此操作。

所以我的问题是,有没有更好或更有效的方法来处理这个问题?

(我所拥有的实际数据在“.”下的最后一列中给出了计数,我不知道为什么我创建的简化示例没有给出计数,而只是重复第二列中的值。我只会如果有必要,请将其作为一个单独的问题!)

您可以通过 brandModel 简单地订购 data.frame。如果您有重复的值,您可以使用 unique() 来只获得不同的组合。

unique(df[order(df$brand, df$Model), ])

returns

   brand   Model
1   Audi      A3
3   Audi      A4
5   Audi      A5
2    BMW       x
6 Toyota   Camry
4 Toyota Corolla