首页 > 解决方案 > 如何按类别将多行数据转换为单行数据?

问题描述

我需要帮助解决这个问题。

当前数据:

File                  Compound         Height
B21990_COPLT_210520   Aggricin         19760 
B21990_COPLT_210520   Ferrioxamine     5064
B21990_COPLT_210520   Betacin          101000
BA6650_CA2LT_210520   Metamin          6640 
BA6650_CA2LT_210520   Surfactin        623600
BA6650_CA2LT_210520   Alanine          6460

所需文件:

File                 High       Med       Low
B21990_COPLT_210520  Betacin    Aggricin  Ferrioxamine
BA6650_CA2LT_210520  Surfactin  NA        Metain,Alanine

我有大约 100-200 行数据,需要通过它们的高度将它们分类为“高”、“中”和“低”(高:峰高 > 60 000;中:> 15 000 但 > 70 000;低: < 15 000)。除此之外,我还需要将文件放在一行中。

这是我当前的代码:

SourceFP <- read.csv("SourceFP.csv",header=TRUE)
SourceFP %>% mutate(Category = case_when(Height>60000~'High',
                                    Height>15000~'Med',
                                    TRUE~'Low')) %>% spread(Category,Name)

不幸的是,当我稍后选择文件时,我无法将文件合并为一行,它们显示为多行:

例如

File                  High           Med            Low
B21990_COPLT_210520   NA             Aggricin       NA         
B21990_COPLT_210520   NA             NA             Ferrioxamine
B21990_COPLT_210520   Betacin        NA             NA
BA6650_CA2LT_210520   NA             NA             Metamin
BA6650_CA2LT_210520   Surfactin      NA             NA
BA6650_CA2LT_210520   NA             NA             Alanine

标签: r

解决方案


用于重塑数据的data.table选项dcast

dcast(
  setDT(SourceFP)[
    ,
    Category := c("Low", "Med", "High")[as.integer(cut(Height, c(-Inf, 15000, 60000, Inf)))]
  ],
  File ~ Category,
  value.var = "Compound",
  fun = toString
)

这使

                  File      High              Low      Med
1: B21990_COPLT_210520   Betacin     Ferrioxamine Aggricin
2: BA6650_CA2LT_210520 Surfactin Metamin, Alanine

推荐阅读