2015-01-13 18 views
1

我有一个数据是这样的:生成一个新的列

> data 
    gene log2FC 
1 A  NA 
2 B  1 
3 C  2 
4 D  -3 

而且我想生成基于log2FC新列FC数据:

> data 
    gene log2FC FC 
1 A  NA NA 
2 B  1 2 
3 C  2 4 
4 D  -3 -8 

我写了一个循环,得到的结果:

LFC <- data$log2FC 
FC <- NULL 

for (i in 1:length(LFC)) { 

a <- LFC[i] 

if (is.na(a)) { 
    FC[i] <- NA 
} else { 
    if (a < 0) { 
    FC[i] <- (-1)/(2^a) 
} else { 
    FC[i] <- 2^a 
} 

} 
} 

data$FC <- FC 

任何人都可以让我知道一个更聪明的方法来生成数据,就像使用应用或其他功能?谢谢你教我!

+2

我想'数据$ FC < - 符号(DF $ log2FC)* 2^ABS(DF $ log2FC)'应该没有任何'if'工作或'ifelse'或'for'循环。 – nicola

+0

@nicola - 这应该是一个答案。 – thelatemail

回答

3

没有任何环或ififelse和类似:

data$FC<-sign(df$log2FC)*2^abs(df$log2FC) 
+0

谢谢!这是更好的解决方案! – user3512961