循环使用if语句对数字进行分类

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并将其与测试进行比较时,它与它应该做的事情不匹配."更多"似乎有效,但它在"少"和"相同"之间混淆.

Kon*_*lph 5

不需要(嵌套)循环,ifelse而是使用矢量化:

testing = ifelse(testing > 1, 'More', ifelse(testing < -1, 'Less', 'Same'))
Run Code Online (Sandbox Code Playgroud)


A5C*_*2T1 5

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)