【发布时间】: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 <- (x > 3) - (x < -3)怎么样 -
我缺少第一列的输入标题。A1 标题落在 column1
-
您需要
dput数据的前几行。
标签: r if-statement matrix