将一个id列包含到split.default结果列表的所有元素中的规范方法

我根据列名将 data.frame 拆分为一个列表。我想要的是将 id 列 ( id) 不仅包含在一个项目中,而且包含在结果列表的所有元素中。

目前我正在通过随后将id列绑定到列表的所有项目mapbind_cols(通过Map/ do.call/mapply等替代。我自己也可以这样做)。我想知道的是有什么直接的规范方法可以直接执行此操作,可能直接使用split.default其他函数的函数参数或直接通过其他函数,从而节省两三个额外步骤。

可重现的例子

df <- data.frame(
  stringsAsFactors = FALSE,
                id = c("A", "B", "C"),
             nm1_a = c(928L, 476L, 928L),
             nm1_b = c(61L, 362L, 398L),
             nm2_a = c(965L, 466L, 369L),
             nm2_b = c(240L, 375L, 904L),
             nm3_a = c(429L, 730L, 788L),
             nm3_b = c(99L, 896L, 540L),
             nm3_c = c(463L, 143L, 870L)
      )

df
#>   id nm1_a nm1_b nm2_a nm2_b nm3_a nm3_b nm3_c
#> 1  A   928    61   965   240   429    99   463
#> 2  B   476   362   466   375   730   896   143
#> 3  C   928   398   369   904   788   540   870

我现在在做什么

library(tidyverse)

split.default(df[-1], gsub('^(nmd+).*', '1', names(df)[-1])) %>%
  map(~ .x %>% bind_cols('id' = df$id, .))
#> $nm1
#>   id nm1_a nm1_b
#> 1  A   928    61
#> 2  B   476   362
#> 3  C   928   398
#> 
#> $nm2
#>   id nm2_a nm2_b
#> 1  A   965   240
#> 2  B   466   375
#> 3  C   369   904
#> 
#> $nm3
#>   id nm3_a nm3_b nm3_c
#> 1  A   429    99   463
#> 2  B   730   896   143
#> 3  C   788   540   870

我想要的是完全相同的输出,但是有什么方法可以直接或更规范地做到这一点?

以上是将一个id列包含到split.default结果列表的所有元素中的规范方法的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>