【问题标题】:Pivot from wide one time-repeated column to wide [duplicate]从一个重复的宽列转向宽[重复]
【发布时间】:2020-11-12 02:05:53
【问题描述】:

假设我有以下宽格式的数据:

data = tibble::tribble(
  ~ID,  ~Time,  ~Value,  ~ValueX,
  "A", 1, 11, 41,
  "A", 2, 12, 42,
  "A", 3, 13, 43,
  "B", 1, 21, 41,
  "B", 2, 22, 42,
  "B", 3, 23, 43,
  "C", 1, 31, 41,
  "C", 2, 32, 42,
  "C", 3, 33, 43
)

由于ValueX 是一个重复变量,在ID 组变量中不变,我只想将其添加为ID 标识的新行。这将是所需的输出:

data.desired = tibble::tribble(
  ~ID,  ~Time,  ~Value,
  "A", 1, 11,
  "A", 2, 12,
  "A", 3, 13,
  "B", 1, 21,
  "B", 2, 22,
  "B", 3, 23,
  "C", 1, 31,
  "C", 2, 32,
  "C", 3, 33,
  "ValueX", 1, 41,
  "ValueX", 2, 42,
  "ValueX", 3, 41
)

【问题讨论】:

  • 它没有。因为任何常规的重塑方式都会导致我使用两个标识符变量,例如ID 加上 ID_new 与新值变量 Value_new 的组合,使 ValueX 在分组变量中重复。

标签: r dataframe dplyr pivot-table reshape


【解决方案1】:

使用tidyverse

addCase <- distinct(data, Time, ValueX) %>% 
  pivot_longer(-Time, names_to = "ID", values_to = "Value") 

data %>% 
  select(-ValueX) %>% 
  add_case(addCase)

# A tibble: 12 x 3
   ID      Time Value
   <chr>  <dbl> <dbl>
 1 A          1    11
 2 A          2    12
 3 A          3    13
 4 B          1    21
 5 B          2    22
 6 B          3    23
 7 C          1    31
 8 C          2    32
 9 C          3    33
10 ValueX     1    41
11 ValueX     2    42
12 ValueX     3    43

【讨论】:

    【解决方案2】:

    这是一种通过基础 R 的方法。您可以每次聚合 ValueX 并获得每个观察值。然后创建一个与原始data 和简单rbind 同名的数据框,即

    rbind(data[-ncol(data)], 
          setNames(data.frame('ValueX', aggregate(ValueX ~ Time, data, head, 1)),
                   names(data[-ncol(data)])))
    
    # A tibble: 12 x 3
    #   ID      Time Value
    #   <chr>  <dbl> <dbl>
    # 1 A          1    11
    # 2 A          2    12
    # 3 A          3    13
    # 4 B          1    21
    # 5 B          2    22
    # 6 B          3    23
    # 7 C          1    31
    # 8 C          2    32
    # 9 C          3    33
    #10 ValueX     1    41
    #11 ValueX     2    42
    #12 ValueX     3    43
    

    【讨论】:

    • 不错!它做我需要的。我想我可以用dplyr 的方式做同样的事情。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-15
    • 2021-05-08
    • 2013-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多