2017-03-27 5 views
0

이것은 question과 유사합니다. 하지만 1000 개의 데이터 프레임을 처리해야합니다.루프를 사용하여 다른 데이터 프레임을 기반으로 데이터 프레임의 열을 업데이트하십시오.

는 I (1000) 아래에 코드를 이용하여 데이터 프레임을 만들었 :

df <- replicate(1000, sensitivity.score, simplify = FALSE) 
names(df) <- paste("score.rand", 1:length(df), sep = "") 
list2env(df, envir = .GlobalEnv) 

첫 번째 데이터 프레임을 다음과 같다 :

head(score.rand1) 
        Binomial S1 S2 S3 S4 S5 S6 S7 S8 S9 
1 Astacoides betsileoensis H L L L H L <NA> L L 
2  Astacoides caldwelli H L L L H L <NA> H <NA> 
3  Astacoides crosnieri L L L L H L <NA> <NA> L 
4  Astacoides granulimanus L L L L H L H <NA> L 
5   Astacoides hobbsi H L H L H L <NA> <NA> L 
6 Astacoides madagascariensis H L L L H L <NA> <NA> L 

I 다른 1,000 데이터 아래 코드를 이용하여 프레임을 만들었다 :

mydf <- data.frame(Binomial, S4, S5, S6) 
lst <- replicate(1000, mydf[sample(nrow(mydf)),] , simplify = FALSE) 
names(lst) <- paste("rand.val", 1:length(lst), sep = "") 
list2env(lst , envir = .GlobalEnv) 

이 모양은 다음과 같습니다.

,210
head(rand.val1) 
        Binomial  S4  S5 S6 
229 Euastacus girurmulayn 46.63442 3.399884 39.0 
168 Distocambarus crockeri 15.76044 6.322875 34.7 
235  Euastacus jagabar 46.63442 3.399884 40.6 
163  Cherax robustus 44.04395 3.108239 42.5 
506 Procambarus ortmannii 88.58447 4.422301 24.0 
392 Pacifastacus fortis 30.40509 5.860764 42.0 

나는 '이항'를 기반으로 'rand.val1'dataframe의 S4, S5, S6 열에 의해 열 S4, S5, 'score.rand1'dataframe의 S6를 교체해야합니다. 'score.rand2'와 'rand.val2'... 'score.rand3'의 'rand.val3'데이터 프레임 ...에 대해서도 마찬가지입니다. 1000 개 데이터 프레임 모두에 대해 마찬가지입니다.

+0

merge (score.rand1, rand.val1, by = "Binomial")'행을 따라 뭔가를 찾고 있습니다. –

+0

감사합니다. 그러나 1000 개의 데이터 프레임에 대해 어떻게이 작업을 수행 할 수 있습니까? for 루프를 사용해 보았지만 실패했습니다. ( –

+2

이것이 R에 data.frames를 저장하고'apply' 함수 군을 사용하여 전체 세트에서 작업하는'list '객체가있는 이유입니다. 만약 data.frames가 있다면 " (ls()를 사용하여) 수동으로 긁어 내고'get()'을 사용하여 검색해야합니다. –

답변

1

데이터 세트를 두 개의 별도 목록으로 만든 다음 mapply와 병합 기능을 사용하여 두 데이터 프레임 목록을 통과하고 첫 번째 열에서 중복 열을 제거한 다음 두 항목을 병합하면 this :

combined = mapply(function(rand,score){ 
    rand$S4 = NULL 
    rand$S5 = NULL 
    rand$S6 = NULL 
    output = merge(x = rand, y = score, by = "Binomial") 
}, scores,rand) 
+0

고맙습니다. 지금 문제가 해결되었습니다. 'df'목록에서 먼저 열 양식 데이터 프레임을 제거한 후 다음 코드를 적용했습니다 :'combined.list <- mapply (function (x, y) merge (x, y, by = "Binomial", all = T), x = df, y = 1, SIMPLIFY = F)' –

관련 문제