【问题标题】:Spread rows into columns in R将行分散到 R 中的列中
【发布时间】:2018-11-16 20:02:32
【问题描述】:

我有两列:一列包含变量的名称,另一列包含它们各自的值。它只有两个变量,每个变量有三个观察值,如下例所示:

library(tidyverse)

tibble(
  var = rep(letters[1:2],3),
  vals = c(1:6)
) %>% 
  arrange(var)

# A tibble: 6 x 2
  var    vals
  <chr> <int>
1 a         1
2 a         3
3 a         5
4 b         2
5 b         4
6 b         6

问题是我需要将ab 变成列,就像在这个预期输出中一样:

# A tibble: 3 x 2
      a     b
  <dbl> <dbl>
1     1     2
2     3     4
3     5     6

我尝试使用tidyr::spread 执行此操作,但没有成功。有什么想法吗?

【问题讨论】:

  • 我猜您遇到了重复标识符错误?您需要唯一标识的行。查看 cmets 并回复this question

标签: r tidyverse tidyr


【解决方案1】:

你可以使用unstack

tbl <- tibble(
  var = rep(letters[1:2],3),
  vals = c(1:6)
) %>% 
  arrange(var)

unstack(tbl, vals ~ var)
#  a b
#1 1 2
#2 3 4
#3 5 6

【讨论】:

    【解决方案2】:

    在按“var”分组后,我们需要一个序列列。它还将确保对于元素数量不同的组,剩余的值可以由选择值填充(默认为NA

    library(tidyverse)
    tbl %>% 
      group_by(var) %>% 
      mutate(rn = row_number()) %>% 
      spread(var, vals) %>% 
      select(-rn)
    # A tibble: 3 x 2
    #      a     b
    #  <int> <int>
    #1     1     2
    #2     3     4
    #3     5     6
    

    数据

    tbl <- tibble(
      var = rep(letters[1:2],3),
      vals = c(1:6)
       ) %>% 
         arrange(var)
    

    【讨论】:

      猜你喜欢
      • 2021-07-22
      • 2018-10-27
      • 2018-06-23
      • 1970-01-01
      • 2019-02-08
      • 2018-07-25
      • 1970-01-01
      • 1970-01-01
      • 2016-11-14
      相关资源
      最近更新 更多