【发布时间】:2015-08-09 07:45:12
【问题描述】:
我有一个 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
【问题讨论】:
-
您能否让您的示例可重现,同时提供所需的输出(这将适合提供的数据集完全)?见here。另外,请保持小,因为我们真的不需要
38467*59矩阵来提供解决方案。最后,我建议不要在矩阵上使用dplyr。dplyr设计用于data.frames,如果你有一个大矩阵并且你正在寻找效率,你应该考虑向量化/矩阵操作。 -
嗨,大卫,感谢您的评论。我实际上犯了一个错误,我的数据是一个 data.frame 对象。我编辑了我的原始帖子,希望它符合您的要求(实际上这是我的第一篇文章..)
-
您想要的输出是否与提供的示例匹配,或者这两个只是
head调用?另外,请用文字描述您实际想要实现的目标以及已经存在的代码有什么问题 -
这两个只是头部调用。但是我提供的那段代码正在运行,并给了我我想要的东西。我只是想在我的数据框的几列上重复它并将结果列绑定到同一个表中。换句话说,我想知道 for 循环是否可以在这里工作,或者任何 apply() 函数......
-
所以您基本上没有按照说明进行操作。我们需要一个完全可重现的示例并完全匹配所需的输出。我们需要对问题的文字描述,然后您的尝试和解释什么不起作用。例如,如果您想创建 50 个额外的列,则可以将其减少到 3 个,然后您应该能够为您的真实数据扩展可能的解决方案。否则,祝你这个问题好运,我希望其他人能帮助你。