2017-02-25 5 views
2

私はRで作業しています。サンプル名を持つデータフレームが多数あり、各行に色を割り当てようとしていますサンプル名に基づいて各データフレーム内に表示されます。同じサンプル名を持つ行がたくさんありますが、出力データが厄介なので、サンプル名でソートすることはできません。ここで私は文字列の共有値に基づいてデータフレームに色を割り当てるR

names   <- c("TC3", "102", "172", "136", "142", "143", "AC2G") 
colors   <- c("darkorange", "forestgreen", "darkolivegreen", "darkgreen", "darksalmon", "firebrick3", "firebrick1") 
dataA   <- c("JR13-101A", "TC3B", "JR12-136C", "AC2GA", "TC3A") 
newcolors  <- rep(NA, length(dataA)) 
dataA   <- as.data.frame(cbind(dataA, newcolors)) 

を持っているものの小さな例の場合だと、私は、次の試してみた(ループで、私は知っているが、それは私がやって考えることがすべてです)。私はまた、Rのループに戻って逃げようとしていますが、私はまだ習慣を壊していません。
ここで私が試したことがあります。

dataA$newcolors<-as.character(dataA$newcolors) 
for(j in 1:length(names)) { 
    dataA$newcolors[grep(names[j], dataA$dataA)] <- colors[j] 
} 

ではなく、要因の文字にnewcolors列を変換します:明らかにおそらく何かが、私はちょうどNAを取得するが、ここではすべてのnewcolors

for(i in 1:nrow(dataA)) { 
    for(j in 1:length(names)) { 
    if(grepl(dataA$dataA[ i ], names[ j ])) { 
    dataA$newcolors[ i ] <- colors[ j ] 
    } 
    } 
} 

答えて

1

に対して返さ1つのループが排除ソリューションは、ありますはるかに簡単に更新。名前の数が少ない場合は、単一ループでパフォーマンスに大きな影響を与えるべきではありません。

関連する問題