grep和/或收集数据混乱

时间:2019-05-06 13:11:01

标签: r

这个问题很简单,但是我却很难解决。

在这个网站上,我已经问过许多有关以各种方式转置,堆叠和重新排列数据的问题,并继续根据人们的响应适应所有应用程序中的所有这些代码。但是我遇到了一个例子,我不确定如何解决。

我有一个数据框(df),标题中带有不同种类的细菌,并在每个物种下均找到了每种细菌的值。

我想在(df)下转置我的数据框,添加一个名为“ species”的列,并添加一个名为“ value”的第二列,并分别填充它们。

在某些天,同一天存在多个物种,这意味着在最终数据集中,如果从该天起有多个数据点,我应该将“天”重复几次。 (请参见sample_finished_data)

    df <- read.table("https://pastebin.com/raw/Myhctf7b", header=T, sep="\t")

这是我想做的一个例子:

    sample_finished_tabled <- read.table("https://pastebin.com/raw/5vHwA5ar",header = T,sep = "\t")

我可以想象这是我会使用grep()或collect()的东西,但是我需要帮助来构建代码。

一如既往地感谢您

2 个答案:

答案 0 :(得分:2)

我们可以使用gather

tidyr::gather(df, species, value, -(1:5), na.rm = TRUE) 

#           ID antibiotic day treatment Agarplate                    species value
#1  Te100.1_d0         Te   0   Te100.1     Tryso    Achromobacter.insolitus   1.0
#2  Te100.1_d0         Te   1   Te100.1       BHI    Achromobacter.insolitus   2.4
#4  Te100.1_d0         Te   3   Te100.1     MRS30    Achromobacter.insolitus   3.0
#5  Te100.1_d0         Te   4   Te100.1       Sab    Achromobacter.insolitus   6.0
#7  Te100.2_d0         Te   6   Te100.2       BHI    Achromobacter.insolitus   7.0
#20 Te100.1_d0         Te   3   Te100.1     MRS30        Acidovorax.defluvii   1.0
#22 Te100.2_d0         Te   5   Te100.2     Tryso        Acidovorax.defluvii   6.0
#30 Te100.2_d0         Te   5   Te100.2     Tryso     Acidovorax.delafieldii   6.0
#31 Te100.2_d0         Te   6   Te100.2       BHI     Acidovorax.delafieldii   7.0
#35 Te100.1_d0         Te   2   Te100.1      Blut Acinetobacter.haemolyticus   5.0
#42 Te100.1_d0         Te   1   Te100.1       BHI    Acinetobacter.johnsonii   2.0

答案 1 :(得分:1)

我们可以使用melt中的data.table

library(data.table)
melt(setDT(df), id.var = 1:5, variable.name = "species", na.rm = TRUE)
#           ID antibiotic day treatment Agarplate                    species value
# 1: Te100.1_d0         Te   0   Te100.1     Tryso    Achromobacter.insolitus   1.0
# 2: Te100.1_d0         Te   1   Te100.1       BHI    Achromobacter.insolitus   2.4
# 3: Te100.1_d0         Te   3   Te100.1     MRS30    Achromobacter.insolitus   3.0
# 4: Te100.1_d0         Te   4   Te100.1       Sab    Achromobacter.insolitus   6.0
# 5: Te100.2_d0         Te   6   Te100.2       BHI    Achromobacter.insolitus   7.0
# 6: Te100.1_d0         Te   3   Te100.1     MRS30        Acidovorax.defluvii   1.0
# 7: Te100.2_d0         Te   5   Te100.2     Tryso        Acidovorax.defluvii   6.0
# 8: Te100.2_d0         Te   5   Te100.2     Tryso     Acidovorax.delafieldii   6.0
# 9: Te100.2_d0         Te   6   Te100.2       BHI     Acidovorax.delafieldii   7.0
#10: Te100.1_d0         Te   2   Te100.1      Blut Acinetobacter.haemolyticus   5.0
#11: Te100.1_d0         Te   1   Te100.1       BHI    Acinetobacter.johnsonii   2.0

注意:为此有很多骗子