首页 > 解决方案 > rowid_to_column() 和 mutate(rowid = row_number()) 之间的不同行为

问题描述

我不明白为什么这两段代码之间存在不同的行为。当我逐行运行每个块时,我真的看不出两个数据帧之间的差异。只有变量的顺序受到影响。你能解释一下为什么我有这两种不同的输出吗?

iris %>% 
  gather(var, value, -Species) %>%
  group_by(Species, var) %>%
  rowid_to_column() %>%
  spread(Species, value) %>%
  select(-rowid)
   # A tibble: 600 x 4
   # Groups:   var [4]. 
   var          setosa versicolor virginica
   <chr>         <dbl>      <dbl>     <dbl>
 1 Sepal.Length    5.1         NA        NA
 2 Sepal.Length    4.9         NA        NA
 3 Sepal.Length    4.7         NA        NA
 4 Sepal.Length    4.6         NA        NA
 5 Sepal.Length    5           NA        NA
 6 Sepal.Length    5.4         NA        NA
 7 Sepal.Length    4.6         NA        NA
 8 Sepal.Length    5           NA        NA
 9 Sepal.Length    4.4         NA        NA
10 Sepal.Length    4.9         NA        NA
# … with 590 more rows

如果我更改rowid_to_column()mutate(rowid = row_number(),我会得到一个更短的表格,见下文:

iris %>% 
  gather(var, value, -Species) %>%
  group_by(Species, var) %>%
  mutate(rowid = row_number()) %>%
  spread(Species, value) %>%
  select(-rowid)
# A tibble: 200 x 4
# Groups:   var [4]
   var          setosa versicolor virginica
   <chr>         <dbl>      <dbl>     <dbl>
 1 Petal.Length    1.4        4.7       6  
 2 Petal.Length    1.4        4.5       5.1
 3 Petal.Length    1.3        4.9       5.9
 4 Petal.Length    1.5        4         5.6
 5 Petal.Length    1.4        4.6       5.8
 6 Petal.Length    1.7        4.5       6.6
 7 Petal.Length    1.4        4.7       4.5
 8 Petal.Length    1.5        3.3       6.3
 9 Petal.Length    1.4        4.6       5.8
10 Petal.Length    1.5        3.9       6.1
# … with 190 more rows

谢谢你的帮助!

标签: rdplyrtidyr

解决方案


推荐阅读