簡體   English   中英

在R中使用ifelse條件轉換值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM