2016-12-12 4 views
1

データフレーム内の特定の値の相対的な一致位置を(文字ベクトルとして)格納するRを持つデータフレームに列を追加しようとしています。それらを一時的なルックアップデータフレーム内の相対的な行位置と比較して、ループ内で即座に生成します。ループの一時的なデータフレーム内の値のインデックスを見つける方法R

ダミーデータ、まだ動作していないスタブ・アット・イットの解決策、および明示的なターゲット列をすべて提供します。 Thnxは事前に。

私はループソリューションに縛られていないことに注意してください。適用アプローチを使用しようとしましたが、運が少なくて済みました。

# the setup 
band = data.frame(zep = c("page","plant","bonham","jones", "grant"), 
       age = c(36, 32, 32, 34, 45), 
       origin = c("heston", "westbrom", "redditch", "sidcup", "eastbourne"), 
       alive = c(1,1,0,1,0), 
       rocked = c(1,1,1,1,0), 
       active = c(59, 51, 18 ,55, 20), stringsAsFactors = F) 

led_index私は「すべてマイ値/行位置が記憶され、led_subbed

led_index = data.frame(value = c(rep("zep", 5), rep("origin", 5), rep("alive", 2), rep("rocked", 2)), 
        variable = c(band$zep, band$origin, 1,0,1,0), 
        stringsAsFactors = F) 

ない私の「バンドの全て、各一意led_indexの$値をサブセット化する働きをしているデータフレームでありますsubset_cols 『

subset_cols = c("zep", "origin", "alive", "rocked") 

私は周期的に再を貼り付けるために見る新しい列をインスタンス化することによって私の解決策を開始」列は、ベクターのみで記録されたもの、しかし、この検索処理が施されます』

band$pass_string = character(nrow(band)) 

に(私はled_subbedに名前を付ける)led_indexのサブセットで見つかったlative位置が、私は、ループ内の4つの一時的なled_subbedのデータフレームの行位置にこの新しい列を移入するためにforループを使用します(ただし、私の解決策は思わ4つのled_subbedではなくled_indexのインデックスを作成する)。

for(i in 1:length(subset_cols)){ 

sub_name = subset_cols[i] 

# subset led_index 
led_subbed = led_index[led_index$value == sub_name,] 
for(j in 1:length(led_subbed$value)){ 

band$pass_string = paste(band$pass_string, as.integer(row.names(led_subbed))[match(led_subbed$variable, band[,names(band) == sub_name])]) 
}} 

マイターゲット列は、行の位置は、subset_colsの値のそれぞれに1つずつ生成されるべきである4つのled_subbedデータフレームの各々から取得され、以下のようになります。

band$my_target_pass_string = c("1 1 1 1", "2 2 1 1", "3 3 2 1", "4 4 1 1", "5 5 2 2") 

これはすべて意味があると思いますか?ここで

答えて

1

match

led_index$ind <- with(led_index, ave(variable, value, FUN = seq)) 

do.call(paste, as.data.frame(sapply(band[subset_cols], function(i) 
           led_index$ind[match(i, led_index$variable)]))) 

#[1] "1 1 1 1" "2 2 1 1" "3 3 2 1" "4 4 1 1" "5 5 2 2" 
+0

こんにちは@Sotosを使用してアイデアです。全体的にこれは私が探しているようだが、空の文字ベクタが返されている。目立つ一面は、led_index $ indにindが何であるかわからないということです。それは行番号を参照する直接的な方法か、私のled_indexデータフレームで何かを変更する必要がありますか? – CallumH

+0

申し訳ありません...私の悪い...それを定義するのを忘れました。編集されました。 – Sotos

+1

素晴らしい! @Sotos :)それはまさに私が何をしたかです。とても有難い。 – CallumH

関連する問題