2013-11-26 176 views
2

所以我有50个变量的值范围从1到4,我想要统计有多少个是1或2以及有多少个是3或4.在for循环中编写一个带有粘贴功能的ifelse语句R

即ABC1 = 2,ABC2 = 2,... abc50 = 3

和下面是我的代码

#Create new variable to store the counted number to 

abc.low=0 
abc.high=0 

这里是我停留在代码(这是行不通的)

for (i in 1:50){ 
ifelse (paste("abc",i,sep="")==1|paste("abc",i,sep="")==2, 
(abc.low<-abc.low<-1),(abc.low<-abc.low)) 
} 

for (i in 1:50){ 
ifelse (paste("abc",i,sep="")==3|paste("abc",i,sep="")==4, 
(abc.high<-abc.high<-1),(abc.high<-abc.high)) 
} 

我假设粘贴功能不适合我所要做的。

即)

abc1=3 

abc1==3 
#True 

paste("abc",1,sep="")==3 
# False 

其中粘贴功能应该返回真,我的目的。

我感谢您的意见!

+4

通常,最好将这些变量存储在列表中而不是单个对象。 – Justin

+1

这是可能的,但你可以将你的变量存储在一个'list'或一个向量中吗?你目前的方法看起来不像“R”那样。 – ialm

回答

3

尝试此例如:

table(unlist(mget(paste0('abc',1:50)))) 
  • mget创建变量的列表,它unlist变换为向量。
  • table给出了每个值的例如发生:

    1 2 3 4 
    14 13 13 10 
    
+0

错误返回:“参数”envir“缺少,没有默认”关于,我认为,mget函数。你偶然会知道为什么吗?顺便说一句,非常感谢您的评论。 – user3038380

+0

你正在运行哪个R版本?(输入'version'来知道哪个版本)我确定你有一个旧的R版本。试试这个'mget(paste0('abc',1:50),envir = as.environment(-1))' – agstudy

+0

它完美的工作!谢谢! – user3038380

1

这将帮助你:

基团= rbinom(32中,n = 50,概率= 0.4)

tapply(组,组,长度)

上面的tapply函数返回组中元素的数量