2013-11-26 107 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函數返回組中元素的數量