如何根据R中的多个列对数据帧进行分组?

时间:2017-09-12 20:10:24

标签: r dataframe dplyr

我在R中有如下数据框:

     V1  V2      V3      V4
 1   81 abc      goth 2014-01-01 05:54:21
 2   81 pqr  deathrock 2014-01-01 05:54:21
 3   81 pqr  goth 2014-01-01 05:54:21
 4   22 abc       80s 2014-01-01 05:54:22
 5   22 uio     retro 2014-01-01 05:54:22
 6   12 xyz     80s 2014-01-01 05:54:54
 7   81 gef      goth 2014-01-01 05:54:55
 8   22 wvy       80s 2014-01-01 05:54:22
 9   12 abc       hit 2014-01-01 05:54:54
 10  12 abc    listen 2014-01-01 05:54:54

我想先根据第V1列对数据框进行分组,然后将第V3列(所有第1列值分组在一起,对于第1列的每个唯一值,第3列值组合在一起),以获得类似于以下:

     V1  V2      V3      V4
 1   81 abc      goth 2014-01-01 05:54:21
 2   81 gef      goth 2014-01-01 05:54:55
 3   81 pqr  goth 2014-01-01 05:54:21
 4   81 pqr  deathrock 2014-01-01 05:54:21
 5   22 abc       80s 2014-01-01 05:54:22
 6   22 wvy       80s 2014-01-01 05:54:22
 7   22 uio     retro 2014-01-01 05:54:22
 8   12 xyz     80s 2014-01-01 05:54:54
 9   12 abc       hit 2014-01-01 05:54:54
 10  12 abc    listen 2014-01-01 05:54:54

我该怎么做?

我试过了

 df = df %>% group_by(V1, V3) 

但它没有给出正确的结果。

2 个答案:

答案 0 :(得分:1)

如果您 对订购数据框使用感兴趣:

dfNew = df %>% %>% arrange(V1,V3) 

但是如果您按组进行计算并需要按订单使用查看结果:

dfNew = df %>% group_by(V1, V3)%>% arrange(V1,V3) 

答案 1 :(得分:1)

试试这个:

df[order(df$V1, df$V3, decreasing=TRUE),]

输出:

    V1  V2        V3                  V4
 1: 81 abc      goth 2014-01-01 05:54:21
 2: 81 pqr      goth 2014-01-01 05:54:21
 3: 81 gef      goth 2014-01-01 05:54:55
 4: 81 pqr deathrock 2014-01-01 05:54:21
 5: 22 uio     retro 2014-01-01 05:54:22
 6: 22 abc       80s 2014-01-01 05:54:22
 7: 22 wvy       80s 2014-01-01 05:54:22
 8: 12 abc    listen 2014-01-01 05:54:54
 9: 12 abc       hit 2014-01-01 05:54:54
10: 12 xyz       80s 2014-01-01 05:54:54