【发布时间】:2015-10-23 13:52:09
【问题描述】:
我有 130,209 行的 data.frame。
> head(dt)
mLow1 mHigh1 mLow2 mHigh2 meanLow meanHigh fc mean
A_00001 37.00 12.75 99.25 78.50 68.125 45.625 1.4931507 56.8750
A_00002 31.00 21.50 84.75 53.00 57.875 37.250 1.5536913 47.5625
A_00003 72.50 26.50 81.75 74.75 77.125 50.625 1.5234568 63.8750
我想将data.frame 拆分为12,在fc 列上应用scale 函数,然后将其合并。这里没有分组变量,否则我会使用ddply。此外,因为 130,209 不能完全被 12 整除,所以生成的 data.frames 将是不平衡的,即 11 data.frames 将有 10,851 行,最后一个将有 10,848 行,但这很好。
那么如何将data.frame 按行拆分为 n 块(在本例中为 12),应用一个函数,然后将它们组合在一起?任何帮助将不胜感激。
更新: 使用两个顶级解决方案,我得到不同的结果: 使用@Ben Bolker 的解决方案,
mLow1 mHigh1 mLow2 mHigh2 UID gene_id meanLow meanHigh mean fc
1.5 3.25 1 1.25 MGLibB_00021 0610010K14Rik 1.25 2.25 1.75 -0.5231249
1.5 3.25 1 1.25 MGLibA_00034 0610037L13Rik 1.25 2.25 1.75 -0.5231249
1.5 3.25 1 1.25 MGLibB_00058 1100001G20Rik 1.25 2.25 1.75 -0.5231249
1.5 3.25 1 1.25 MGLibA_00061 1110001A16Rik 1.25 2.25 1.75 -0.5231249
1.5 3.25 1 1.25 MGLibA_00104 1110034G24Rik 1.25 2.25 1.75 -0.5231249
1.5 3.25 1 1.25 MGLibA_00110 1110038F14Rik 1.25 2.25 1.75 -0.5231249
使用@MichaelChirico 的回答:
mLow1 mHigh1 mLow2 mHigh2 UID gene_id meanLow meanHigh mean fc fc_scaled
1.5 3.25 1 1.25 MGLibB_00021 0610010K14Rik 1.25 2.25 1.75 0.5555556 -0.5089608
1.5 3.25 1 1.25 MGLibA_00034 0610037L13Rik 1.25 2.25 1.75 0.5555556 -0.5089608
1.5 3.25 1 1.25 MGLibB_00058 1100001G20Rik 1.25 2.25 1.75 0.5555556 -0.5089608
1.5 3.25 1 1.25 MGLibA_00061 1110001A16Rik 1.25 2.25 1.75 0.5555556 -0.5089608
1.5 3.25 1 1.25 MGLibA_00104 1110034G24Rik 1.25 2.25 1.75 0.5555556 -0.5089608
1.5 3.25 1 1.25 MGLibA_00110 1110038F14Rik 1.25 2.25 1.75 0.5555556 -0.5089608
【问题讨论】:
-
这个行数不大。为什么要单独操作 scale 并合并结果而不是直接缩放 fc 列??
-
我想控制平均丰度(平均值)的 fc(倍数变化)。数据在我的实际数据框中按平均值排序。我想为单独的平均丰度块分别计算 zscore(非常低,低......中......高......到非常高)
-
为什么不使用
cut(1:nrow(dt), 12)进行拆分?