我想根据列中的值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
谢谢!
答案 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)
在带有stack
和cbind
的基础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