根据现有值

时间:2017-07-11 16:31:06

标签: r

我需要一种基于target_id过滤数据的方法。因为我有一组1600个target_id值没有一致的名称,而另一组包含“' comp'”,我认为最简单的方法是创建一个基于值的值的新列。 target_id。我有一个数百帧的数据帧看起来像这样(只是抓住随机行来显示它的要点):

      sample_id          target_id l ength eff_length est_counts     tpm
159  SRR3884838C           CR1_Mam   2204       2005           0           0
160  SRR3884838C         CYRA11_MM    617        418           0           0
161  SRR3884838C          DERV2a_I   5989       5790          19    0.734541
162  SRR3884838C        DERV2a_LTR    335        136           7     11.5213
1094236 SRR3884878C comp78901_c0_seq3_1 1115     916       113.4     32.3604
1094237 SRR3884878C comp85230_c0_seq1_1 1201     1002      514       134.088
1094238 SRR3884878C comp56944_c0_seq1_1 2484     2285      10.5      1.20115

我需要为包含' comp'的sample_ids创建一个值为1的新列(" class")所有其他人都为0。这可能吗?该数据具有40个样本(SRR3884838 - > SRR3884878),并且每个样本具有相同的target_id集合,一组非均匀目标名称,然后是另一组都包含comp。示例(出于格式化原因删除了tpm列)

 sample_id          target_id       length   eff_length      est_counts class
159  SRR3884838C           CR1_Mam   2204       2005           0           0        
160  SRR3884838C         CYRA11_MM    617        418           0           0
161  SRR3884838C          DERV2a_I   5989       5790          19           0
162  SRR3884838C        DERV2a_LTR    335        136           7           0
1094236 SRR3884878C comp78901_c0_seq3_1 1115     916       113.4           1
1094237 SRR3884878C comp85230_c0_seq1_1 1201     1002      514             1
1094238 SRR3884878C comp56944_c0_seq1_1 2484     2285      10.5            1

我尝试使用merge函数首先创建一个新的数据框,该数据框的类列具有一组target_id的正确值,可能不正确的期望它会创建新列,其中一个target_id中的一个列出,但当我这样做时,它删除了eff_length列并与数据格式混淆。我发现的所有示例都是用户根据其他列创建新列的值来使用数字,我不知道如何使用字符串comp。这就是我的所作所为:

total <- merge(data frameA,data frameB,by="target_id")

是df A是我的原始数据,df B看起来像上面的类列一样。

2 个答案:

答案 0 :(得分:1)

使用:

df$class <- as.integer(grepl('comp', df$target_id))

给出:

> df
          sample_id           target_id length eff_length est_counts class
159     SRR3884838C             CR1_Mam   2204       2005        0.0     0
160     SRR3884838C           CYRA11_MM    617        418        0.0     0
161     SRR3884838C            DERV2a_I   5989       5790       19.0     0
162     SRR3884838C          DERV2a_LTR    335        136        7.0     0
1094236 SRR3884878C comp78901_c0_seq3_1   1115        916      113.4     1
1094237 SRR3884878C comp85230_c0_seq1_1   1201       1002      514.0     1
1094238 SRR3884878C comp56944_c0_seq1_1   2484       2285       10.5     1

答案 1 :(得分:-1)

sample$class <- as.numeric(grepl ("^comp", sample$target_id))怎么样?