2014-02-27 2 views
0

26 개의 데이터 프레임 목록이 있습니다. 아래의 코드를 사용하여 벡터를 만듭니다. for 루프를 사용하여 26 개의 모든 데이터 프레임에 동일한 고유 함수를 적용하고 각 데이터 프레임에 벡터가 포함 된 26 개의 데이터 프레임 목록을 새로 작성하는 방법이 있습니까? 각 데이터 프레임은 해당 데이터 프레임에 따라 다른 벡터를 생성합니다.for 루프를 사용하여 데이터 프레임 목록을 만들려면 R

(unique(paste(list[[1]]$row, list[[1]]$col, sep="")) 

> (unique(paste(list[[1]]$row, list[[1]]$col, sep=""))) 
[1] "A1" "A2" "A3" "A5" "A6" "A7" "A8" "A9" "A10" "A11" "A12" "B1" "B2" "B3" "B4" "B5" "B6" "B7" "B8" "B9" 
[21] "B10" "B11" "B12" "C1" "C2" "C3" "C4" "C5" "C6" "C7" "C8" "C9" "C10" "C11" "C12" "D1" "D2" "D3" "D4" "D5" 
[41] "D6" "D7" "D8" "D9" "D10" "D11" "D12" "E1" "E2" "E3" "E4" "E5" "E6" "E7" "E8" "E9" "E10" "E11" "E12" "F1" 
[61] "F2" "F3" "F4" "F5" "F6" "F7" "F8" "F9" "F10" "F11" "F12" "G1" "G2" "G3" "G4" "G5" "G6" "G7" "G8" "G9" 
[81] "G10" "G11" "G12" "H1" "H2" "H3" "H4" "H5" "H6" "H7" "H8" "H9" "H10" "H11" "H12" 

그래서 내가 원하는 결과는 각 데이터 프레임은 다음과 같은 일부 또는 다음 목록에 포함 된 모든 요소를 ​​(포함

[[1]] 
[1] "A1" "A2" "A3" "A5" "A6" "A7" "A8" "A9" "A10" "A11" "A12" "B1" "B2" "B3" "B4" "B5" "B6" "B7" "B8" "B9" 
[21] "B10" "B11" "B12" "C1" "C2" "C3" "C4" "C5" "C6" "C7" "C8" "C9" "C10" "C11" "C12" "D1" "D2" "D3" "D4" "D5" 
[41] "D6" "D7" "D8" "D9" "D10" "D11" "D12" "E1" "E2" "E3" "E4" "E5" "E6" "E7" "E8" "E9" "E10" "E11" "E12" "F1" 
[61] "F2" "F3" "F4" "F5" "F6" "F7" "F8" "F9" "F10" "F11" "F12" "G1" "G2" "G3" "G4" "G5" "G6" "G7" "G8" "G9" 
[81] "G10" "G11" "G12" "H1" "H2" "H3" "H4" "H5" "H6" "H7" "H8" "H9" "H10" "H11" "H12" 

[[2]] 
[1] "A1" "A2" "A3" "A5" "A6" "A7" "A8" "A9" "A10" "A11" "A12" "B1" "B2" "B3" "B4" "B5" "B6" "B7" "B8" "B9" 
[21] "B10" "B11" "B12" "C1" "C2" "C3" "C4" "C5" "C6" "C7" "C8" "C9" "C10" "C11" "C12" "D1" "D2" "D3" "D4" "D5" 
[41] "D6" "D7" "D8" "D9" "D10" "D11" "D12" "E1" "E2" "E3" "E4" "E5" "E6" "E7" "E8" "E9" "E10" "E11" "E12" "F1" 
[61] "F2" "F3" "F4" "F5" "F6" "F7" "F8" "F9" "F10" "F11" "F12" "G1" "G2" "G3" "G4" "G5" "G6" "G7" "G8" "G9" 
[81] "G10" "G11" "G12" "H1" "H2" "H3" "H4" "H5" "H6" "H7" "H8" "H9" "H10" "H11" "H12" 

[[3]] 
[1] "E10" "E11" "E12" "F1" "F2" "F3" "F4" "F5" "F6" "F7" "F8" "F9" "F10" "F11" "F12" "G1" "G2" "G3" "G4" "G5" 
[21] "G6" "G7" "G8" "G9" "G10" "G11" "G12" "H1" "H2" "H3" "H4" "H5" "H6" "H7" "H8" "H9" "H10" "H11" "H12" 

etc etc until [[26]] 

해명 ... 같은 것입니다 목록에는 96 개의 요소가 있음) :

list(c(paste0(rep(LETTERS[1:8], each=12), rep(1:12, 8)))) 

그래서 26 개의 데이터 프레임 목록을 통해 각 데이터 프레임에 포함 된 요소를 알려주는 것이 필요합니다. 일부 데이터 프레임에는 96 개의 요소가 모두 포함되어 있지 않을 수 있으므로 필자가 원하는 결과의 예에서 [...]는 단지 40 개의 요소 만 갖고 싶어한다는 것을 보여주었습니다.

+1

'lapply'를 사용하십시오. 이러한 작업을 위해 설계되었습니다. – Roland

+0

@Roland 이렇게 좋아? lapply (list, function (x) unique (paste [list [[i]] $ row, list [[i]] $ col, sep = ""))) 목록의 데이터 프레임을 제공하지만 벡터는 반환하는 것은 원래 목록의 각 데이터 프레임과 일치하지 않습니다. – hj14

+1

거의. 'lapply (list, function (x) unique (paste0 (x $ row, x $ col)))'' – Roland

답변

0

뭔가 같은 .. 즉 더욱 분명 희망 :

lapply(list, function(x) unique(do.call(paste0, x))) 

가 수행해야합니다. do.calldo.call의 두 번째 인수로 설정된 인수를 사용하여 첫 번째 인수 (이 경우 함수 paste0)를 호출합니다. x은 목록 인 데이터 프레임이므로 잘 작동합니다. 다음은 샘플 출력입니다 :

[[1]] 
[1] "G18" "J20" "N12" "U11" "E1" 

[[2]] 
[1] "F10" "E14" "Q18" "I7" "X13" 

[[3]] 
[1] "Y8" "F1" "P7" "C15" "Z6" 

[[4]] 
[1] "M14" "O16" "L2" "E13" "S7" 

[[5]] 
[1] "V16" "Q1" "S9" "M13" "L12" 

는 데이터 내가 사용 :

set.seed(1) 
list <- replicate(5, data.frame(row=sample(LETTERS, 5), col=sample(1:20, 5)), s=F) 
lapply(list, function(x) do.call(paste0, x)) 
0

내가 그렇게 내 가짜 데이터 세트를 용서하십시오, 데이터의 구조를 이해하지 못했다.

lapply 함수 내에서 사용할 수도 있습니다.

df1 <- data.frame(a = c(1, 2, 3), 
        b = c(4, 5, 6)) 

df2 <- data.frame(a = c(5, 6, 7), 
        b = c(8, 9, 10)) 

dfList <- list(df1 = df1, df2 = df2) 

lapply(dfList, transform, c = a - b) 
관련 문제