使用逻辑向量替换列中的值

时间:2018-11-13 02:11:33

标签: r dataframe replace

我有一个长格式的数据框。 OTU列具有〜428个唯一ID,并且经过重复测量得出26,536行。

'data.frame':   26536 obs. of  18 variables:
 $ OTU        : chr  "109431" "109431" "109431" "109431" ...
 $ Sample     : chr  "m.ch.45" "m.ch.59" "m.ch.85" "m.ch.51" ...
 $ Abundance  : num  0.994 0.983 0.981 0.975 0.975 ...
 $ X.SampleID : Factor w/ 62 levels "m.ch.1","m.ch.101",..: 28 37 52 33 
                                                8 15 13 7 58 14 ...
 $ Family     : Factor w/ 89 levels 
    "f__","f__[Acidaminobacteraceae]",..: 26 26 26 26 26 26 26 26 26 26 
                                              ...

在OTU列中的唯一ID中,我想重点介绍其中的9个(top9names)。 我做了一个逻辑向量,将前9名中的所有OTU都设置为TRUE,而将所有其他OTU设置为FALSE

matches <- qd_melted$OTU %in% top9names

对于这9个OTU名称,我想保留相应的系列名称(column5)。对于其他OTU名称(〜419),我想将“家庭”列中的值替换为“其他类群”。 有关如何编写此代码的任何提示?

1 个答案:

答案 0 :(得分:3)

在为因子添加新值时,您需要首先更新级别。这是一种方法-

levels(qd_melted$Family) <- c(levels(qd_melted$Family), "Other taxa")

qd_melted$Family[!matches] <- "Other taxa"