use*_*798 2 loops if-statement r
我正在创建一个循环的麻烦.我的意图是循环将看到值下降的位置并给该值另一个名称.这是我想要做的一个例子:
a<-rnorm(10,0,1)
b<-rnorm(10,0,1)
testing<-data.frame(a,b)
testing2<-testing
for (i in 1:nrow(testing2)){
for (j in 1:ncol(testing2)){
if (testing2[i,j]>1) testing2[i,j]<-"More"
else if (testing2[i,j]<(-1)) testing2[i,j]<-"Less"
else testing2[i,j]<-"Same"
}
}
Run Code Online (Sandbox Code Playgroud)
当我查看testing2并将其与测试进行比较时,它与它应该做的事情不匹配."更多"似乎有效,但它在"少"和"相同"之间混淆.
不需要(嵌套)循环,ifelse
而是使用矢量化:
testing = ifelse(testing > 1, 'More', ifelse(testing < -1, 'Less', 'Same'))
Run Code Online (Sandbox Code Playgroud)
cut
在这里作为一个明显的候选人浮现在脑海 由于您需要跨多个列应用它,因此您可以lapply
按如下方式使用:
x <- testing
x[] <- lapply(testing, cut, breaks=c(-Inf, -1, 1, Inf),
labels=c("less", "same", "more"))
x
Run Code Online (Sandbox Code Playgroud)
^^ 编辑与评论的改进;-)
或者as.matrix
代替lapply
......
x <- cut(as.matrix(testing), c(-Inf, -1, 1, Inf),
labels=c("less", "same", "more"))
dim(x) <- dim(testing)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
102 次 |
最近记录: |