【问题标题】:R reshape wide to long: multiple variables, observations with multiple indiciesR从宽到长重塑:多个变量,具有多个索引的观察
【发布时间】:2020-11-18 17:56:01
【问题描述】:

我有一些数据包含多个 idicies $y_{ibc}$ 的观察结果,这些数据以凌乱的宽格式存储。我一直在摆弄 tidyr 和 reshape2 但无法弄清楚(重塑真的是我的克星)。

这是一个例子:

df <- structure(list(id = c(1, 2, 3, 4, 5, 6, 7, 8, 9), a1b1c1 = c(5, 
2, 1, 4, 3, 1, 0, 1, 3), a2b1c1 = c(3, 4, 1, 1, 3, 2, 1, 4, 4
), a3b1c1 = c(4, 0, 0, 1, 1, 1, 0, 0, 1), a1b2c1 = c(1, 0, 4, 
2, 4, 1, 0, 4, 2), a2b2c1 = c(2, 0, 1, 0, 1, 0, 3, 2, 0), a3b2c1 = c(2, 
4, 3, 0, 2, 3, 3, 3, 4), yc1 = c(1, 2, 2, 1, 2, 2, 2, 1, 1), a1b1c2 = c(4, 
2, 3, 0, 4, 4, 2, 1, 4), a2b1c2 = c(3, 0, 3, 3, 4, 4, 3, 2, 2
), a3b1c2 = c(3, 1, 0, 1, 4, 0, 2, 2, 3), a1b2c2 = c(2, 2, 0, 
3, 2, 1, 4, 1, 0), a2b2c2 = c(3, 0, 2, 3, 4, 4, 4, 0, 4), a3b2c2 = c(0, 
0, 0, 2, 0, 0, 1, 4, 3), yc2 = c(2, 2, 2, 1, 2, 2, 2, 1, 1), X = c(5, 
6, 3, 7, 4, 3, 2, 3, 2)), row.names = c(NA, -9L), class = c("tbl_df", 
"tbl", "data.frame"))

这就是我想要的(摘录):

     id b     c         y    a1    a2    a3     X

1     1 b1    c1        1     5     3     4     5
2     1 b2    c1        1     1     2     2     5
3     1 b1    c2        2     4     3     3     5
4     1 b2    c2        2     2     3     0     5

【问题讨论】:

    标签: r reshape


    【解决方案1】:

    使用tidyr & dplyr

    library(tidyverse)
    
    df %>% 
      pivot_longer(cols = matches("a.b.c."), names_to = "name", values_to = "value") %>% 
      separate(name, into = c("a", "b", "c"), sep = c(2,4)) %>% 
      mutate(y = case_when(c == "c1" ~ yc1,
                           c == "c2" ~ yc2)) %>% 
      pivot_wider(names_from = a, values_from = value) %>% 
      select(id, b, c, y, a1, a2, a3, X)
    

    首先,将所有 a/b/c 列转换为长格式,并将 3 个值分成单独的列。然后根据c 的值使用mutatecase_wheny 列合并为一列(您也可以将if_else 用于两个选项,但case_when 可用于更多值)。然后将您的 a 列转回宽格式并使用 select 将它们按正确的顺序排列,并去掉 yc1yc2 列。

    【讨论】:

      猜你喜欢
      • 2019-11-22
      • 1970-01-01
      • 1970-01-01
      • 2022-01-20
      • 2018-02-17
      • 1970-01-01
      • 2020-07-12
      • 2019-03-14
      • 1970-01-01
      相关资源
      最近更新 更多