【问题标题】:Use gather() to retain grouping variable while collapsing all columns into one column [duplicate]使用gather()保留分组变量,同时将所有列折叠成一列[重复]
【发布时间】:2020-10-22 11:14:37
【问题描述】:

我正在尝试将数据中的所有列收集到一个列中,但代表分组变量的一列除外。例如,如果使用 mini_iris:

mini_iris <- iris[c(1, 51, 101), ]
mini_iris

这是我使用gather()能得到的最接近的结果:

mini_iris %&gt;% gather(key = "Species", value = "Measurement")

但我想要的是 Species 列保留原始 Species 列中的物种值。这样我仍然知道每个测量来自哪个物种。这看起来很简单,但一直无法惊人地找到解决方案......

提前感谢您的宝贵时间。

编辑: 预期的输出应如下所示:

mini_iris_long <- 
  data.frame(
    Species = c(rep("setosa", 4),rep("versicolor", 4),rep("virginica", 4)),
    Measurement = c(5.1,
                    3.5,
                    1.4,
                    0.2,
                    7.0,
                    3.2,
                    4.7,
                    1.4,
                    6.3,
                    3.3,
                    6.0,
                    2.5)
    )
mini_iris_long

【问题讨论】:

    标签: r dplyr tidyr data-wrangling


    【解决方案1】:

    根据gather,第三个参数是3个点(...)并提到

    ...- 列的选择。如果为空,则选择所有变量。您可以提供裸变量名称,使用 x:z 选择 x 和 z 之间的所有变量,使用 -y 排除 y。有关更多选项,请参阅 dplyr::select() 文档。另请参阅下面有关选择规则的部分。

    所以我们使用- 选择除“物种”以外的所有列,将其重新整形为“长”格式

    library(dplyr)
    library(tidyr)
    mini_iris %>%
          gather(key, Measurement, -Species) %>% 
          select(-key) %>%
          arrange(Species)
    #      Species Measurement
    #1      setosa         5.1
    #2      setosa         3.5
    #3      setosa         1.4
    #4      setosa         0.2
    #5  versicolor         7.0
    #6  versicolor         3.2
    #7  versicolor         4.7
    #8  versicolor         1.4
    #9   virginica         6.3
    #10  virginica         3.3
    #11  virginica         6.0
    #12  virginica         2.5
    

    或者pivot_longer

    mini_iris %>%
         pivot_longer(cols = -Species, values_to = 'Measurement') %>% 
         select(-name)
    

    【讨论】:

      猜你喜欢
      • 2017-11-10
      • 2022-07-18
      • 1970-01-01
      • 2018-01-15
      • 2016-01-02
      • 1970-01-01
      • 2017-10-23
      • 2018-02-02
      • 1970-01-01
      相关资源
      最近更新 更多