首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R循环和如果是

R循环和如果是
EN

Stack Overflow用户
提问于 2016-05-02 03:09:06
回答 2查看 55关注 0票数 0

我想在循环中给变量'ax‘赋值。我的代码是:

代码语言:javascript
复制
 ax<-0
 for (i in i:4){
 if(i%%4==1)
 {
    ax[i]<-"one"
 }
 else if(i%%4==2)
 {
     ax[i]<-"two"
 }
 else if(i%%4==3)
 {
     ax[i]<-"three"
 }
else
 {
     ax[i]<-"four"
 }

}

我想我有ax1,ax2,ax3和ax4,

代码语言:javascript
复制
"one"    "two"     "three"     "four"

但我得到了:

代码语言:javascript
复制
"0"    NA     NA     "four"

这只是一次尝试,真正的代码要长得多。但主要的问题是如何将值赋值给相应的数组变量。这个有什么问题吗?

在这里,我添加真正的代码

代码语言:javascript
复制
#library(sqldf)
n = 4
a=0
b=0
c=0
d=0
e=0
f=0
g=0
h=0

Sui_Q1_STS<-0
Sui_Q1_TS<-0
Sui_Q1_S<-0
Sui_Q1_SS<-0
Sui_Q2_STS<-0
Sui_Q2_TS<-0
Sui_Q2_S<-0
Sui_Q2_SS<-0
for (i in 1:n){

 if(i%%4==1)
 {
a<-sqldf("SELECT count([X.0]) from testes where [X.0]='Sangat Tidak Setuju' and (StartDate like '%11/05/2015 00:%' or StartDate like '%11/05/2015 01:%' or StartDate like '%11/05/2015 02:%' or StartDate like '%11/05/2015 03:%' or StartDate like '%11/05/2015 04:%' or StartDate like '%11/05/2015 05:%' or StartDate like '%11/05/2015 06:00%')")
#b c d e f g and h are also sqldf
Sui_Q1_STS[i]<-as.numeric(a)
Sui_Q1_TS[i]<-as.numeric(b)
Sui_Q1_S[i]<-as.numeric(c)
Sui_Q1_SS[i]<-as.numeric(d)
Sui_Q2_STS[i]<-as.numeric(e)
Sui_Q2_TS[i]<-as.numeric(f)
Sui_Q2_S[i]<-as.numeric(g)
Sui_Q2_SS[i]<-as.numeric(h)


Sui_Q1<-list()
Sui_Q1[[i]]<-cbind(Sui_Q1_STS[i],Sui_Q1_TS[i],Sui_Q1_S[i],Sui_Q1_SS[i])
Sui_Q2<-list()
Sui_Q2[[i]]<-cbind(Sui_Q2_STS[i],Sui_Q2_TS[i],Sui_Q2_S[i],Sui_Q2_SS[i])
Total[i]<-Sui_Q1[[i]][,1]+Sui_Q1[[i]][,2]+Sui_Q1[[i]][,3]+Sui_Q1[[i]][,4]
}
   else if(i%%4==2){

  #only different in SQL
   }
   else if(i%%4==3){

  #only different in SQL
}
   else if(i%%4==0){

   #only different in SQL
}

}

我得到了:

代码语言:javascript
复制
> Sui_Q1
[[1]]
NULL

[[2]]
NULL

[[3]]
NULL

[[4]]
     [,1] [,2] [,3] [,4]
[1,]    0    0    4    4
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-05-02 03:17:48

如果我们需要把数字转换成英文单词

代码语言:javascript
复制
library(english)
english(v1)
#[1] two   one   three three three four  two   four  four  two  

或者使用没有任何循环的base R

代码语言:javascript
复制
c("four", "one", "two", "three")[as.numeric(factor((v1%%4==1) + 
             2*(v1%%4==2) + 4*(v1%%4==3)))]
#[1] "two"   "one"   "three" "three" "three" "four"  "two"   "four"  "four"  "two"  

如果我们真的需要一个循环

代码语言:javascript
复制
 ax <- numeric(4)
 for(i in 1:4){
  if(i%%4 ==1){
  ax[i] <- "one"
  } else if (i%%4 ==2){
 ax[i] <- "two"
 }else if (i%%4 ==3){
  ax[i] <- "three"
 } else {
  ax[i] <- "four"
  }
 }

ax
#[1] "one"   "two"   "three" "four" 

数据

代码语言:javascript
复制
set.seed(24)
v1 <- sample(1:4, 10, replace=TRUE)
票数 3
EN

Stack Overflow用户

发布于 2016-05-02 03:25:49

这个非常简单的表达式可以实现您想要的结果:

代码语言:javascript
复制
i <- 1:4
c("four", "one", "two", "three")[i %% 4 + 1]
## [1] "one"   "two"   "three" "four"
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36974450

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档