【问题标题】:How to efficiently transpose data frames with the tidyverse or data.table? [duplicate]如何使用 tidyverse 或 data.table 有效地转置数据帧? [复制]
【发布时间】:2021-09-28 20:28:33
【问题描述】:

我有几个以 *.var 结尾的文件,然后我想合并

为此,我使用了包 purrr

filelist = list.files(pattern = "*.var$") #make the file list 
df = filelist %>%
  set_names() %>% 
  map_dfr(
    ~ read_csv(.x, col_types = cols(), col_names = FALSE),
    .id = "file_name"
  )

这似乎给了我想要的输出

# A tibble: 6 x 3
  file_name X1           X2   
  <chr>     <chr>        <chr>
1 CV.var    Chrom_3_793  T    
2 CV.var    Chrom_3_4061 G    
3 CV.var    Chrom_3_4034 G    
4 CV.var    Chrom_3_4035 A    
5 GK.var    Chrom_3_4061 T    
6 CV.var    Chrom_3_4064 T  

但现在我想将此表转换为具有布尔值的表。 基本上,我希望第 1 列的值(总共有 4 个)成为列条目。 前 2 列将是 X1 和 X2 列 这样我就可以知道是否

Chrom_3_4061 T 在我的 1、2、3 或 4 个集合中,例如:

            CV.var GK.var DP.var SK.var  
Chrom_3_4061 G 1       0     1       1

那应该是转置和剪切粘贴的问题,什么是最有效的方法,我对不同的包和方法感到有点迷茫。

非常感谢。

【问题讨论】:

  • 这里没有建议使用data.table 包(data.table tag 除外),并且您的所有代码都使用 tidyverse 函数。你能澄清一下吗?
  • 我可以使用任何解决方案,我不依赖于 tidyverse 或 data.table。
  • 查看链接的帖子,它有很多解决方案,包括整洁和数据表。

标签: r dataframe data.table tidyverse tidy


【解决方案1】:

你可以使用pivot_wider:

library(tidyr)

df %>% 
  mutate(value = TRUE) %>% 
  pivot_wider(names_from = file_name, values_fill = FALSE)

我用布尔值而不是 01 填充它。

【讨论】:

    猜你喜欢
    • 2017-03-11
    • 1970-01-01
    • 2021-05-21
    • 1970-01-01
    • 2017-06-28
    • 2022-11-10
    • 1970-01-01
    • 2018-04-08
    • 2018-11-01
    相关资源
    最近更新 更多