用 R 重塑 table

Reshaping table with R

我想使用 R 重塑 table。我尝试了 pivot_wider 函数,但没有达到预期的结果。

这是我的 table:

table1 <- structure(list(subjects = c("Group A_subject 1", "Group A_subject 2", 
"Group A_subject 3", "Group B_subject 1", "Group B_subject 2"
), age = c(6, 8, 4, 9, 7), whatever = c(10, 12, 15, 16, 19)), class = c("spec_tbl_df", 
"tbl_df", "tbl", "data.frame"), row.names = c(NA, -5L), spec = structure(list(
    cols = list(subjects = structure(list(), class = c("collector_character", 
    "collector")), age = structure(list(), class = c("collector_double", 
    "collector")), whatever = structure(list(), class = c("collector_double", 
    "collector"))), default = structure(list(), class = c("collector_guess", 
    "collector")), skip = 1L), class = "col_spec"))

我正在尝试类似下面的操作,但我无法为 names_sep.

设置正确的模式
    tableout <- table1 %>%
    pivot_wider(names_from = subjects, names_sep = Group *, values_from = age, values_fill = 1)

我是 R 的新手,所以另一个解决方案可能比使用 pivot 更好。 基本上是把原值赋给宽幅的A组和B组。

dput() 的期望输出 - table 是手动创建的

   output <- structure(list(subjects = c("subject 1", "subject 2", "subject 3"
    ), `Group A` = c(6, 8, 4), `Group B` = c(9, 7, NA)), class = c("spec_tbl_df", 
    "tbl_df", "tbl", "data.frame"), row.names = c(NA, -3L), spec = structure(list(
        cols = list(subjects = structure(list(), class = c("collector_character", 
        "collector")), `Group A` = structure(list(), class = c("collector_double", 
        "collector")), `Group B` = structure(list(), class = c("collector_double", 
        "collector"))), default = structure(list(), class = c("collector_guess", 
        "collector")), skip = 1L), class = "col_spec"))

我们可以使用 separate 然后 pivot_wider 使用 tidyrdplyr 包。都在 tidyverse

library(tidyverse)
df1 <- table1 %>% 
  select(-whatever) %>% 
  separate(subjects, c("Group", "Subject"), "_") %>% 
  pivot_wider(names_from = "Group", values_from= "age")

# Output
# A tibble: 3 x 3
# Groups:   Subject [3]
  Subject   `Group A` `Group B`
  <chr>         <dbl>     <dbl>
1 subject 1         6         9
2 subject 2         8         7
3 subject 3         4        NA