如何用R的dplyr将指定列汇总为列表并保留原列
解决方案
可以使用dplyr的rowwise()和c_across()函数实现需求,具体代码如下:
library(tidyverse) df = tibble(gene=c("geneA","geneB","geneC"), dat1=c(100,100,50), dat2=c(50,100,20), dat3=c(10,20,30)) # 生成包含列表列的结果数据框 df_result <- df %>% rowwise() %>% mutate(data = list(c_across(-gene))) %>% # -gene 表示排除gene列,选取其余所有列 ungroup() # 查看结果 df_result
运行后输出结果:
#> # A tibble: 3 × 5 #> gene dat1 dat2 dat3 data #> <chr> <dbl> <dbl> <dbl> <list> #> 1 geneA 100 50 10 <dbl [3]> #> 2 geneB 100 100 20 <dbl [3]> #> 3 geneC 50 20 30 <dbl [3]>
代码说明
rowwise():将数据框转换为行分组模式,确保后续操作按行执行c_across(-gene):选取除gene列外的所有列的当前行值,组合成向量list():将向量包装为列表元素,生成列表类型的新列dataungroup():取消行分组,恢复数据框的默认分组状态
内容的提问来源于stack exchange,提问作者LDT
相关产品推荐
相关产品推荐

