首页 > 解决方案 > 根据列/标签重新排序 R 数据框的行

问题描述

我当前在 R 中的数据框具有以下维度

  nrows=605  
  ncol: 1514

第一列表示类/标签,我的数据集只有两个类:setosa 和 iris。

    test[1:5,]
    class     id1  id2...
  1:  setosa  2     4.....
  2:  setosa  2     5 .....
  3:  setosa  5     4 .....
  4:  iris    5     9......
  5:  iris    7     9 ....

然而,数据框现在是有序的:即。我的数据框的第 2 行第 233 行对应于 setosa 类,而 iris 类是从 234 到结束。我希望重新排列数据集,以便将样本混合在一起。

预期输出应采用以下形式:如果我执行 df[1:10,] 即。10行数据框,我应该可以看到鸢尾花和setosa的样本。关于如何做到这一点的任何想法或建议?

标签: rdata-manipulation

解决方案


library( tidyverse )
iris[1:10,]
#    Sepal.Length Sepal.Width Petal.Length Petal.Width Species
# 1           5.1         3.5          1.4         0.2  setosa
# 2           4.9         3.0          1.4         0.2  setosa
# 3           4.7         3.2          1.3         0.2  setosa
# 4           4.6         3.1          1.5         0.2  setosa
# 5           5.0         3.6          1.4         0.2  setosa
# 6           5.4         3.9          1.7         0.4  setosa
# 7           4.6         3.4          1.4         0.3  setosa
# 8           5.0         3.4          1.5         0.2  setosa
# 9           4.4         2.9          1.4         0.2  setosa
# 10          4.9         3.1          1.5         0.1  setosa

df <- iris %>% 
  group_by( Species ) %>% 
  mutate( id = row_number() ) %>%
  arrange( id ) %>%
  select ( -id )

df[1:10,]
#   Sepal.Length Sepal.Width Petal.Length Petal.Width Species   
#          <dbl>       <dbl>        <dbl>       <dbl> <fct>     
# 1          5.1         3.5          1.4         0.2 setosa    
# 2          7           3.2          4.7         1.4 versicolor
# 3          6.3         3.3          6           2.5 virginica 
# 4          4.9         3            1.4         0.2 setosa    
# 5          6.4         3.2          4.5         1.5 versicolor
# 6          5.8         2.7          5.1         1.9 virginica 
# 7          4.7         3.2          1.3         0.2 setosa    
# 8          6.9         3.1          4.9         1.5 versicolor
# 9          7.1         3            5.9         2.1 virginica 
# 10          4.6         3.1          1.5         0.2 setosa   

推荐阅读