将dplyr函数应用于矩阵的多个列

时间:2015-08-09 07:45:12

标签: r matrix dplyr

我有一个38467 * 59的数据框。这是整个数据集的子集

mydata.2
   Unique.Groups Protein.group.IDs Intensity.R1 Intensity.R2
1            yes                 0      9701600     17971000
2            yes                 0            0     29308000
3            yes                 1     49083000     75300000
4            yes                 2     53926000     13926000
5            yes                 3     35255000     35750000
6            yes                 3    302600000    295410000
7            yes                 4     72766000     51914000
8            yes                 5     33657000     31027000
9            yes                 5     16504000     20689000
10           yes                 5    191170000    209230000
11           yes                 5    155710000    150280000
12           yes                 5    402890000    529300000
13           yes                 5    633480000    522180000
14           yes                 5     92339000            0
15           yes                 6            0     30646000
16           yes                 6     67494000     92326000
17           yes                 6     20205000            0
18           yes                 7     94183000     76848000
19           yes                 7     15584000            0
20           yes                 7     27247000     38961000
21           yes                 7     98433000    390870000
22           yes                 8            0     36542000
23           yes                 8     83978000            0
24           yes                 8     53744000     95173000
25           yes                 8            0     53494000

我将以下代码应用于Intensity.R1列,并且我想自动将其应用于数据框的所有Intensities列。 在每一轮我都需要在Intensity.R1,Intensity.R2上运行相同的代码,等等。

     data.normalized <- filter(mydata.2, Unique.Groups == "yes") %>% 
  group_by(Protein.group.IDs) %>%
  arrange(desc(Intensity.R1)) %>% 
  top_n(3, Intensity.R1) %>%
  mutate(sum.top.3.R1 = sum(Intensity.R1)) %>%
  filter(!duplicated(Protein.group.IDs)) %>%
  drop.levels() %>%
  arrange(Protein.group.IDs)

每一轮都应该生成一个新列(即sum.top.3),我希望在最终表中将它们绑定在一起。 以下是Intensity.R1列的示例。

data.normalized    
Source: local data frame [9 x 5]
    Groups: Protein.group.IDs

      Unique.Groups Protein.group.IDs Intensity.R1 Intensity.R2 sum.top.3.R1
    1           yes                 0      9701600     17971000      9701600
    2           yes                 1     49083000     75300000     49083000
    3           yes                 2     53926000     13926000     53926000
    4           yes                 3    302600000    295410000    337855000
    5           yes                 4     72766000     51914000     72766000
    6           yes                 5    633480000    522180000   1227540000
    7           yes                 6     67494000     92326000     87699000
    8           yes                 7     98433000    390870000    219863000
    9           yes                 8     83978000            0    137722000

1 个答案:

答案 0 :(得分:1)

我创建了一个具有相同列名的简单示例供您修改。

GetAll

即使在您的代码中,如果您使用了&#34;汇总&#34;而不是&#34;变异&#34;你不必过滤掉重复的id。 我不知道我是否在这里丢失了drop.levels的内容。 另外,我真的不认为你需要第一个&#34;安排&#34;因为top_n将保持前三名,但不是正确的顺序(这不是问题)。