按其他列的级别列出一列的子级别

时间:2018-02-05 13:06:53

标签: r reshape2 dcast

这个问题可能已在本网站的某个地方讨论过,但经过多次搜索后我无法找到。 我们假设我的数据帧只有2列,可以用下面的代码

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

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

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

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  

前两列正是我想要的,但我想我不必要地生成第三列然后丢弃以后的列。此外,有可能在没有任何额外库的情况下完成此操作。

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

(我的实际数据给出了最后一栏下的计数'。我不知道为什么我创建的简化示例不给出计数但是只重复第二列中的值如果必须的话,我会把它当作一个单独的问题!)

1 个答案:

答案 0 :(得分:1)

您只需按data.framebrand订购Model即可。如果您有重复的值,则可以使用unique()仅获取不同的组合。

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

返回

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