更改列数据框某些行的值:分类 table
Change value of certain rows of a column data frame: taxonomic table
我有一个分类学 table(数据框),它由许多细菌观察结果组成,并分配给不同的分类水平(5 个分类水平的 5 列,称为等级)。一些观察没有完整的分配,这意味着缺少信息,这些观察需要用分类级别的字母和_来填充。
我需要用字符串填充特定列缺少信息的行。
我拥有的一个子集是(等级 5 缺少信息):
tax_table_F[51:59,]
Rank1 Rank2 Rank3 Rank4 Rank5
214036 k__Bacteria p__Firmicutes c__Clostridia o__Clostridiales f__[Mogibacteriaceae]
968675 k__Bacteria p__Proteobacteria c__Gammaproteobacteria o__Pasteurellales f__Pasteurellaceae
121873 k__Bacteria p__Firmicutes c__Clostridia o__Clostridiales f__Dehalobacteriaceae
357046 k__Bacteria p__Bacteroidetes c__Bacteroidia o__Bacteroidales f__Rikenellaceae
302106 k__Bacteria p__Synergistetes c__Synergistia o__Synergistales f__Dethiosulfovibrionaceae
836693 k__Bacteria p__Firmicutes c__Clostridia o__SHA-98 f__
577170 k__Bacteria p__Bacteroidetes c__Bacteroidia o__Bacteroidales f__Bacteroidaceae
269386 k__Bacteria p__Cyanobacteria c__4C0d-2 o__YS2 f__
New.ReferenceOTU79 k__Bacteria p__Firmicutes c__Bacilli o__Lactobacillales f__Lactobacillaceae
我想做的是用 Rank3、Rank4 和 Rank5 列的数据串联替换 Rank5 列中具有 "f__" 的观察结果。
我所做的是创建一个新的数据框 tax_table_sF,将所有具有 "f__" 的观察结果子集化(通过行名手动)并将 Rank5 数据替换为来自 3列。
tax_table_sF<-tax_tableF[c(1887417 ,461487, 360268, 211720 , 467605, 290455, 836693 , 269386 , "OTU38251" ),] # generate the new data frame
tax_table_sF$Rank5<-paste(tax_table_sF$Rank3, tax_table_sF$Rank4, tax_table_sF$Rank5, sep=".") # replace "f__" with concatenated data
Rank1 Rank2 Rank3 Rank4
1887417 k__Bacteria p__TM7 c__TM7-3 o__
461487 k__Bacteria p__Firmicutes c__Clostridia o__Clostridiales
360268 k__Bacteria p__Tenericutes c__RF3 o__ML615J-28
211720 k__Bacteria p__Proteobacteria c__Alphaproteobacteria o__RF32
467605 k__Bacteria p__Cyanobacteria c__Chloroplast o__Streptophyta
290455 k__Bacteria p__Bacteroidetes c__Bacteroidia o__Bacteroidales
836693 k__Bacteria p__Firmicutes c__Clostridia o__SHA-98
269386 k__Bacteria p__Cyanobacteria c__4C0d-2 o__YS2
OTU38251 k__Bacteria p__Tenericutes c__Mollicutes o__RF39
Rank5
1887417 c__TM7-3.o__.f__
461487 c__Clostridia.o__Clostridiales.f__
360268 c__RF3.o__ML615J-28.f__
211720 c__Alphaproteobacteria.o__RF32.f__
467605 c__Chloroplast.o__Streptophyta.f__
290455 c__Bacteroidia.o__Bacteroidales.f__
836693 c__Clostridia.o__SHA-98.f__
269386 c__4C0d-2.o__YS2.f__
OTU38251 c__Mollicutes.o__RF39.f__
然后我尝试了,
tax_table_F_mer<-merge(tax_table_F., tax_table_sF)
但我得到一个空数据框。我尝试添加 by="Rank5"
或添加新列 df$rowname<-rownames(df)
并添加 by="rownames"
没有成功。
这是一个简单的例子(我希望我明白你想要实现的目标):
tax_table_F[tax_table_F$Rank5=="f__",]$Rank5 <- cbind(paste(tax_table_F[tax_table_F$Rank5=="f__",]$Rank3,tax_table_F[tax_table_F$Rank5=="f__",]$Rank4,tax_table_F[tax_table_F$Rank5=="f__",]$Rank5,sep="."))
与上一个答案相同,但代码可能更具可读性
tax_table_F$Rank5 <- as.character(tax_table_F$Rank5) # as necessary, convert column from factor to character
f__rows <- tax_table_F$Rank5=="f__" # rows to be changed
tax_table_F$Rank5[f__rows ] <- with(tax_table_F[f__rows,], paste(Rank3, Rank4, Rank5, sep="." ) )
我有一个分类学 table(数据框),它由许多细菌观察结果组成,并分配给不同的分类水平(5 个分类水平的 5 列,称为等级)。一些观察没有完整的分配,这意味着缺少信息,这些观察需要用分类级别的字母和_来填充。 我需要用字符串填充特定列缺少信息的行。
我拥有的一个子集是(等级 5 缺少信息):
tax_table_F[51:59,]
Rank1 Rank2 Rank3 Rank4 Rank5
214036 k__Bacteria p__Firmicutes c__Clostridia o__Clostridiales f__[Mogibacteriaceae]
968675 k__Bacteria p__Proteobacteria c__Gammaproteobacteria o__Pasteurellales f__Pasteurellaceae
121873 k__Bacteria p__Firmicutes c__Clostridia o__Clostridiales f__Dehalobacteriaceae
357046 k__Bacteria p__Bacteroidetes c__Bacteroidia o__Bacteroidales f__Rikenellaceae
302106 k__Bacteria p__Synergistetes c__Synergistia o__Synergistales f__Dethiosulfovibrionaceae
836693 k__Bacteria p__Firmicutes c__Clostridia o__SHA-98 f__
577170 k__Bacteria p__Bacteroidetes c__Bacteroidia o__Bacteroidales f__Bacteroidaceae
269386 k__Bacteria p__Cyanobacteria c__4C0d-2 o__YS2 f__
New.ReferenceOTU79 k__Bacteria p__Firmicutes c__Bacilli o__Lactobacillales f__Lactobacillaceae
我想做的是用 Rank3、Rank4 和 Rank5 列的数据串联替换 Rank5 列中具有 "f__" 的观察结果。
我所做的是创建一个新的数据框 tax_table_sF,将所有具有 "f__" 的观察结果子集化(通过行名手动)并将 Rank5 数据替换为来自 3列。
tax_table_sF<-tax_tableF[c(1887417 ,461487, 360268, 211720 , 467605, 290455, 836693 , 269386 , "OTU38251" ),] # generate the new data frame
tax_table_sF$Rank5<-paste(tax_table_sF$Rank3, tax_table_sF$Rank4, tax_table_sF$Rank5, sep=".") # replace "f__" with concatenated data
Rank1 Rank2 Rank3 Rank4
1887417 k__Bacteria p__TM7 c__TM7-3 o__
461487 k__Bacteria p__Firmicutes c__Clostridia o__Clostridiales
360268 k__Bacteria p__Tenericutes c__RF3 o__ML615J-28
211720 k__Bacteria p__Proteobacteria c__Alphaproteobacteria o__RF32
467605 k__Bacteria p__Cyanobacteria c__Chloroplast o__Streptophyta
290455 k__Bacteria p__Bacteroidetes c__Bacteroidia o__Bacteroidales
836693 k__Bacteria p__Firmicutes c__Clostridia o__SHA-98
269386 k__Bacteria p__Cyanobacteria c__4C0d-2 o__YS2
OTU38251 k__Bacteria p__Tenericutes c__Mollicutes o__RF39
Rank5
1887417 c__TM7-3.o__.f__
461487 c__Clostridia.o__Clostridiales.f__
360268 c__RF3.o__ML615J-28.f__
211720 c__Alphaproteobacteria.o__RF32.f__
467605 c__Chloroplast.o__Streptophyta.f__
290455 c__Bacteroidia.o__Bacteroidales.f__
836693 c__Clostridia.o__SHA-98.f__
269386 c__4C0d-2.o__YS2.f__
OTU38251 c__Mollicutes.o__RF39.f__
然后我尝试了,
tax_table_F_mer<-merge(tax_table_F., tax_table_sF)
但我得到一个空数据框。我尝试添加 by="Rank5"
或添加新列 df$rowname<-rownames(df)
并添加 by="rownames"
没有成功。
这是一个简单的例子(我希望我明白你想要实现的目标):
tax_table_F[tax_table_F$Rank5=="f__",]$Rank5 <- cbind(paste(tax_table_F[tax_table_F$Rank5=="f__",]$Rank3,tax_table_F[tax_table_F$Rank5=="f__",]$Rank4,tax_table_F[tax_table_F$Rank5=="f__",]$Rank5,sep="."))
与上一个答案相同,但代码可能更具可读性
tax_table_F$Rank5 <- as.character(tax_table_F$Rank5) # as necessary, convert column from factor to character
f__rows <- tax_table_F$Rank5=="f__" # rows to be changed
tax_table_F$Rank5[f__rows ] <- with(tax_table_F[f__rows,], paste(Rank3, Rank4, Rank5, sep="." ) )