如何根据列中的特定值转换输入数据?

时间:2017-09-07 12:53:21

标签: r dataframe

我想根据列中的值2和-2转换输入数据。结果应如下所示。

Input:

Symbol   S1   S2   S3   S4   S5
ATAC     0     1    -1   -2   2
BHGV     1     1    -2    2   0
CCNL     2    -2     1    0   1
AGRN     0     2    -2    0   1

Result:

S1  2 CCNL
S2 -2 CCNL
S2  2 AGRN
S3 -2 BHGV
S3 -2 AGRN
S4 -2 ATAC
S4  2 BHGV
S5  2 ATAC

谢谢!

2 个答案:

答案 0 :(得分:1)

akrun有点快。如果他没有发帖,这里有完整的答案:

library(data.table)
data <- fread("
      Symbol   S1   S2   S3   S4   S5
      ATAC     0     1    -1   -2   2
      BHGV     1     1    -2    2   0
      CCNL     2    -2     1    0   1
      AGRN     0     2    -2    0   1
      ")

melted <- melt(data, id.var = "Symbol")
melted <- melted[abs(melted$value) == 2, ]

关于编辑:

melted[melted == 2] <- "TWO"
melted[melted == -2] <- "MTWO"

答案 1 :(得分:1)

在带有stackcbind的基础R中,您可以执行

# get 3 column data.frame
dat2 <- cbind(Symbol=dat$Symbol, stack(dat[-1]))
# drop unacceptable values
dat2[abs(dat2$values) > 1,]
   Symbol values ind
3    CCNL      2  S1
7    CCNL     -2  S2
8    AGRN      2  S2
10   BHGV     -2  S3
12   AGRN     -2  S3
13   ATAC     -2  S4
14   BHGV      2  S4
17   ATAC      2  S5