首页 > 解决方案 > 是否有任何 R 函数可以为类别类型数据交换行?

问题描述

我有一个大致如下的数据框:

X   Cat     Nam    Val
1   Total  Total   102012
2   Car     A       12312
3   Car     B       22222
4   Car     Total   34534
5   Bike    C       1000
6   Bike    Total   1000

我希望它看起来像:

X   Cat     Nam    Val
1   Car    Total   34534
2   Car     A       12312
3   Car     B       22222
4   Bike   Total   1000
5   Bike    C       1000
6   Total  Total   102012

有没有更简单的方法来重新排列,这取决于可能有​​更多的类别?

标签: rdataframe

解决方案


您可以根据您想要数据的顺序分配因子水平。

例如,在Cat列中,您希望'Total'值排在最后,因此将其保留在最后levels,其余的保留在开头。在Nam列中你想Total成为第一所以保持第一。安排因子水平后,您可以order在这 2 列中获取数据。

使用基础 R,您可以这样做:

df <- transform(df, 
            Cat = factor(Cat, levels = unique(c(Cat[Cat != 'Total'], 'Total'))), 
            Nam = factor(Nam, levels = unique(c('Total', Nam))))

df[with(df, order(Cat, Nam)), ]

#  X   Cat   Nam    Val
#4 4   Car Total  34534
#2 2   Car     A  12312
#3 3   Car     B  22222
#6 6  Bike Total   1000
#5 5  Bike     C   1000
#1 1 Total Total 102012

推荐阅读