0

我有一个非常大的数据框(大约 700 列和 4,00,000 行)。示例如下:

           "samp1"             "samp2"              "samp3"
"ct1"   3.45909539741409    4.16162745114877    4.28378657903742
"ct2"   2.45516883029741    2.64529479763739    2.62023669114738
"ct3"   -1.53506396613939   -1.53318358856732   -1.2235498333358
"ct4"   2.54561049516449    1.91067140586626    2.6860636959124
"ct5"   1.08270893850391    0.847112473835081   0.90241673852809
"ct6"   -1.49057768051391   -1.09321836721649   -1.11635564230449
"ct7"   -0.82888593769947   -0.533641693674542  -0.339345700770896

所有列在每个数字单元格中都包含 log2 值(假设为“a”),我希望使用以下公式将它们全部转换为正常值(假设为“b”):

b = 2^a / [(2^a) + 1]

所以我的结果文件应该像上面那样,但所有转换后的值都是 b,而不是 a。

谁能帮我这个 ?提前致谢。

4

2 回答 2

2

正如 Andrie 在评论中所说,您应该简单地将公式应用于您的数据框。并将其转换为矩阵将使事情运行得更快。像这样的东西:

DATA <- as.matrix(read.table(text = "samp1             samp2              samp3
3.45909539741409    4.16162745114877    4.28378657903742
2.45516883029741    2.64529479763739    2.62023669114738
-1.53506396613939   -1.53318358856732   -1.2235498333358
2.54561049516449    1.91067140586626    2.6860636959124
1.08270893850391    0.847112473835081   0.90241673852809
-1.49057768051391   -1.09321836721649   -1.11635564230449
-0.82888593769947   -0.533641693674542  -0.339345700770896", header = TRUE))

DATAprocessed <- 2^DATA/((2^DATA) + 1)
于 2013-01-15T14:14:26.220 回答
2

创建一些数据

a <- matrix(runif(21), ncol=3,
            dimnames=list(paste0("ct", 1:7), paste0("samp", 1:3)))

a
         samp1     samp2      samp3
ct1 0.36856468 0.1969006 0.21410103
ct2 0.80894310 0.4402108 0.96686681
ct3 0.52169299 0.1410873 0.35899306
ct4 0.75243588 0.5432110 0.85099247
ct5 0.77734048 0.5657070 0.33521023
ct6 0.73011232 0.1539275 0.08615577
ct7 0.08505216 0.4905622 0.13415698

转换:

b <- 2^a / ((2^a) + 1)

b
        samp1     samp2     samp3
ct1 0.5635223 0.5340674 0.5370329
ct2 0.6366183 0.5756963 0.6615437
ct3 0.5894301 0.5244291 0.5618897
ct4 0.6275099 0.5930347 0.6433337
ct5 0.6315359 0.5967925 0.5578276
ct6 0.6238860 0.5266483 0.5149252
ct7 0.5147341 0.5841982 0.5232309
于 2013-01-15T14:16:07.857 回答