【问题标题】:transform values with ifelse conditions in R在 R 中使用 ifelse 条件转换值
【发布时间】:2016-03-04 11:28:31
【问题描述】:

我正在尝试在 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。
  • 我收到此错误.. .subset(x, j) 中的错误:无效的下标类型“列表”
  • x &lt;- (x &gt; 3) - (x &lt; -3)怎么样
  • 我缺少第一列的输入标题。A1 标题落在 column1
  • 您需要dput 数据的前几行。

标签: r if-statement matrix


【解决方案1】:

无需使用ifelse。你的声明相当于(x &gt; 3) - (x &lt; -3)

所以你可以使用data.table:

library(data.table)
d <- fread("input.txt")

d[ , lapply(.SD, function(x) (x > 3) - (x < -3))]

【讨论】:

  • 输入 A1 A2 B2 B3 B5 1: 1 1 0 0 1 0 2: 1 1 0 0 0 0 3: 1 1 0 0 0 0 4: 1 1 1 0 0 0 5: 1 1 0 0 0 0 运行时输出几行..我错过了第一列
  • @user2243831 你不能真的指望我解析它。请考虑提出您的问题reproducible
  • 我编辑了这个问题..当我运行你的程序时,我在输入列中得到全 1,而不是 a1、a2 等。
猜你喜欢
  • 1970-01-01
  • 2019-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多