2017-02-25 2 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

반환 한 루프를 제거하는 솔루션이며, 업데이트가 훨씬 쉬워졌습니다. 이름 수가 적 으면 단일 루프에 성능에 별 영향을주지 않아야합니다.