在新列中描述一段时间内的表达式

时间:2015-10-01 17:56:15

标签: r

我有一些看起来像这样的基因表达数据:

> d$new_column2<-c("down","up","mixed","down","mixed","mixed","up")
> d
  gene_id     day_1     day_2     day_3     day_4 new_column
1  Gene_1 -3.836501 -4.643856 -5.058894 -5.058894       down
2  Gene_2 13.161867  6.740118 13.507918 13.349972         up
3  Gene_3 -6.643856  5.766860 -6.127014 -6.726967      mixed
4  Gene_4 -2.736966 -3.058894 -2.643856 -2.943416       down
5  Gene_5 -2.836501 -3.473931  3.643856 -4.321928      mixed
6  Gene_6  2.836501 -3.058894  3.836501 -5.643856      mixed
7  Gene_7 11.000232 11.353974 10.792245 10.309476         up

当您从左到右阅读基因数据时,您可以看到在某些基因中,表达总是负的,有些表达总是正面的,有些则是混合的。我想创建一个新专栏,描述这些基因是否始终是正面,负面或混合的。像这样:

{{1}}

除了自动完成,不是手动编写的。所以基本上我喜欢R来读取整行中的数字,并报告数字是否始终是一致的,正面的,负面的,或两者的混合。我想在一个与我的基因ID匹配的新列中描述这种行为。

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

如果将data.frame子集化为数字数据(在本例中为第2列到第5列),这应该适合您:

df$new_column <- apply(df[,2:5], 1, function(x) {
    if(sign(max(x)) == sign(min(x))) {  # Then all same sign
        if(sign(max(x)) == 1) "up"  # Then all positive
        else "down" # All negative
    }
    else "mixed"  # Signs of max/min not equal, so mixed
})