2011-06-30 10 views
3

私はrep()関数を使用して、文字列内の各要素を何度も繰り返します。私が持っている各キャラクタには状態に関する情報が含まれており、キャラクタベクタの最初の3つの要素が3回繰り返され、4番目の要素が5回繰り返される必要があります。rep()関数を使って作業する

私は次の文字ベクトルを持っているとしましょう。

al <- c("AlabamaCity", "AlabamaCityST", "AlabamaCityState", "AlabamaZipCode") 
ak <- c("AlaskaCity", "AlaskaCityST", "AlaskaCityState", "AlaskaZipCode") 
az <- c("ArizonaCity", "ArizonaCityST", "ArizonaCityState", "ArizonaZipCode") 
ar <- c("ArkansasCity", "ArkansasCityST", "ArkansasCityState", "ArkansasZipCode") 

私は次の出力を持つことになります。

AlabamaCity 
AlabamaCity 
AlabamaCity 
AlabamaCityST 
AlabamaCityST 
AlabamaCityST 
AlabamaCityState 
AlabamaCityState 
AlabamaCityState 
AlabamaZipCode 
AlabamaZipCode 
AlabamaZipCode 
AlabamaZipCode 
AlabamaZipCode 
AlabamaZipCode 
... 

私は、次のコマンドを使用して所望の出力を得ることができたが、私はすべての50件の州を走るてるときは少し不便です。さらに、私はアラバマ州に237都市ある別の列を持っているかもしれません、そして、私は必然的に最初の列の名前と2番目の列の値を一致させる問題に遭遇します。

dat = data.frame(name=c(rep(al[1:3],each=3), rep(al[4],each=6), 
       rep(ak[1:3],each=3), rep(ak[4],each=6))) 
    dat 


    dat2 = data.frame(name=c(rep(al[1:3],each=3), rep(al[4],each=6), 
       rep(ak[1:3],each=3), rep(ak[4],each=6)), 
       city=c(rep("x",each=15), rep("y",each=15))) 
    dat2 

実際には、「x」と「y」は単一の値ではありません。

私の質問は、このタスクを実行するより効率的な方法があるかどうかということです。そして、この質問に密接に関連して、RのOOPを支持する手続き型プログラミングを捨てることはいつ重要なのですか(プログラマーではないので、2番目の部分は本当にばかげた質問かもしれません)。 oop関連のソリューションの場合

答えて

7

?repによれば、times=はベクターであり得る。したがって、これについてはどうすればよいでしょうか:

dat <- data.frame(name=rep(al, times=c(3,3,3,6))) 

「状態」データがリストにある場合は、さらに便利です。

stateData <- list(al,ak,az,ar) 
Data <- lapply(stateData, function(x) data.frame(name=rep(x, times=c(3,3,3,6)))) 
Data <- do.call(rbind, Data) 
2

私はあなたがsapply()でリストを作業するreptimes()引数を組み合わせることができると思います。だから、最初、私たちは私たちのリストオブジェクトを作成する必要があります。

vars <- list(al, ak, az, ar) 


# Iterate through each object in vars. By default, this returns a column for each list item. 
# Convert to vector and then to data.frame...This is probably not that efficient. 
as.data.frame(as.vector(sapply(vars, function(x) rep(x, times = c(3,3,3,6))))) 

1               AlabamaCity 
2               AlabamaCity 
3               AlabamaCity 
4              AlabamaCityST 
....snip.... 
....snip.... 
57             ArkansasZipCode 
58             ArkansasZipCode 
59             ArkansasZipCode 
60             ArkansasZipCode 
2

あなたはそれからの結果に貼り付け、expand.gridを使用して検討するかもしれません。

関連する問題