2015-01-13 38 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