R语言 从第一列开始的长到宽格式

yhuiod9q  于 2023-04-09  发布在  其他
关注(0)|答案(1)|浏览(115)

我有一个Excel文件,标题是:trait,genotype_id,BLUE,BLUE_SE,BLUP,BLUP_SE和遗传力。除了trait列,所有列都包含数字。这列有性状Fe,Zn和S。所以我有3组数据。我想总结这些基因型,所以我有genotype_id,BLUE_Fe,BLUE_Zn,BLUE_S,BLUE_SE_Fe等。
我如何在R中转换这个文件,以便特征不仅是一列,而且我分别在单独的列中具有Fe,Zn和S的特征,以便我可以在R中创建相关矩阵?
我尽力了

data_wide <- spread(allBLUEs, trait, BLUE)

但这显然只会将蓝色移动到相同的行。我试过了

data_wide <- spread(allBLUEs, key = trait, value = c(BLUE, BLUE_SE, BLUP, BLUP_SE, heritability), sep = "_")

但值项似乎只能查看一列?
我的数据

df=tribble(~trait,~genotype_id,~BLUE,~BLUE_SE,~ BLUP,~BLUP_SE,~ heritability,
           "Fe", 3, 47.2, 2.13, 43.0, 1.76, 0.685,
           "Fe", 386, 42.5, 2.13, 39.8, 1.76, 0.685,
           "Zn", 3, 24.4, 1.74, 23.6, 1.18, 0.456,
           "S", 386, 1253, 51.3, 1269, 38.0, 0.545)
1l5u6lss

1l5u6lss1#

我想你可以用pivot_wider形式tidyr来做。

library(tibble)
library(tidyr)
df=tribble(~trait,~genotype_id,~BLUE,~BLUE_SE,~ BLUP,~BLUP_SE,~ heritability,
           "Fe", 3, 47.2, 2.13, 43.0, 1.76, 0.685,
           "Fe", 386, 42.5, 2.13, 39.8, 1.76, 0.685,
           "Zn", 3, 24.4, 1.74, 23.6, 1.18, 0.456,
           "S", 386, 1253, 51.3, 1269, 38.0, 0.545)
df %>%
  pivot_wider(
    names_from = trait,
    values_from = BLUE:heritability
  )

#> # A tibble: 2 × 16
#>   genoty…¹ BLUE_Fe BLUE_Zn BLUE_S BLUE_…² BLUE_…³ BLUE_…⁴ BLUP_Fe BLUP_Zn BLUP_S
#>      <dbl>   <dbl>   <dbl>  <dbl>   <dbl>   <dbl>   <dbl>   <dbl>   <dbl>  <dbl>
#> 1        3    47.2    24.4     NA    2.13    1.74    NA      43      23.6     NA
#> 2      386    42.5    NA     1253    2.13   NA       51.3    39.8    NA     1269
#> # … with 6 more variables: BLUP_SE_Fe <dbl>, BLUP_SE_Zn <dbl>, BLUP_SE_S <dbl>,
#> #   heritability_Fe <dbl>, heritability_Zn <dbl>, heritability_S <dbl>, and
#> #   abbreviated variable names ¹​genotype_id, ²​BLUE_SE_Fe, ³​BLUE_SE_Zn,
#> #   ⁴​BLUE_SE_S

创建于2023-04-08使用reprex v2.0.2

相关问题