[英]transform values with ifelse conditions in R
我正在嘗試在R中讀取一個巨大的矩陣文件,並使用ifelse在某些條件下替換值並出現問題
輸入
Input A1 A2 B2 B3 B5
a1 7.805 0 2.722 3.601 1.106
a2 6.557 0 2.449 2.828 -2
a3 5.899 2.333 2 0 0
a4 5.779 7.517 0 0 0
a5 5.52 0 1.633 1.342 0
.......
.......
a300 -6.172 0 0 0 0.917
a301 -6.24 -2.132 -2.218 -1.973 0
a302 -6.436 0 0 1.516 4.611
a303 -6.529 0 0 0 0
a305 -6.607 -2.668 -2.883 0 0
我嘗試在行下運行,但在輸出中我看到其更改了一些行(隨機列)的條件,但並非所有行和行名都在改變
d <- read.table("input.txt",header=T,sep="\t",row.names=1,as.is=TRUE)
s <- apply(d,2,function(x) ifelse(x>=3,1, ifelse(x<=-3,-1, ifelse(x<3|x>-3,0,x))) )
write.table(s,file="s.txt",sep="\t",quote=FALSE)
腳本的輸出
A1 A2 B2 B3 B5
a1 1 0 0 1 0
a2 1 0 0 0 0
a3 1 0 0 0 0
a4 1 1 0 0 0
a5 1 0 0 0 0
.....
.....
a300 -6.172 0 0 0 0.917
a301 -6.24 -2.132 -2.218 -1.973 0
a302 -6.436 0 0 1.516 4.611
a303 -6.529 0 0 0 0
a305 -6.607 -2.668 -2.883 0 0
我可以在這方面獲得幫助嗎?
預期產量
Input A1 A2 B2 B3 B5
a1 1 0 0 1 0
a2 1 0 0 0 0
a3 1 0 0 0 0
a4 1 1 0 0 0
a5 1 0 0 0 0
.......
無需使用ifelse
。 您的陳述相當於(x > 3) - (x < -3)
。
因此,您可以只使用data.table
:
library(data.table)
d <- fread("input.txt")
d[ , lapply(.SD, function(x) (x > 3) - (x < -3))]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.