我有一个非常庞大的数据框(大约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。
任何人都可以帮我吗? 提前谢谢。
答案 0 :(得分: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)
答案 1 :(得分: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