这个问题很简单,但是我却很难解决。
在这个网站上,我已经问过许多有关以各种方式转置,堆叠和重新排列数据的问题,并继续根据人们的响应适应所有应用程序中的所有这些代码。但是我遇到了一个例子,我不确定如何解决。
我有一个数据框(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()的东西,但是我需要帮助来构建代码。
一如既往地感谢您
答案 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
注意:为此有很多骗子