2013-09-28 4 views
0

내가 사용 가져온 여러 개의 텍스트 파일이열 조합

colnames<-c("cellID", "X", "Y", "Area", "AVGFP", "DeviationGFP", "AvgRFP", "DeviationsRFP", "Slice", "GUI-ID") 
stats <- apply(data.frame(list.files()), 1, read.table,sep="", header=F, col.names=colnames) 
names(stats) <- paste0("slice",seq_along(1:40)) 

이 어떤 통계에서 slice1하는 모양입니다 :

cellID   X   Y Area AVGFP DeviationGFP AvgRFP DeviationsRFP Slice GUI.ID 
1  1 18.20775 26.309859 568 5.389085  7.803248 12.13028  5.569880  0  1 
2  2 39.78755 9.505495 546 5.260073  6.638375 17.44505  17.220153  0  1 
3  3 30.50000 28.250000 4 6.000000  4.000000 8.50000  1.914854  0  1 
4  4 38.20233 132.338521 257 3.206226  5.124264 14.04669  4.318130  0  1 
5  5 43.22467 35.092511 454 6.744493  9.028574 11.49119  5.186897  0  1 
6  6 57.06534 130.355114 352 3.781250  5.713022 20.96591  14.303546  0  1 
7  7 86.81765 15.123529 1020 6.043137  8.022179 16.36471  19.194279  0  1 
8  8 75.81932 132.146417 321 3.666667  5.852172 99.47040  55.234726  0  1 
9  9 110.54277 36.339233 678 4.159292  6.689660 12.65782  4.264624  0  1 
10  10 127.83480 11.384886 569 4.637961  6.992881 11.39192  4.287963  0  1 

다른 데이터 세트의 모든 모습 그들 모두가 행 길이가 변하는 것을 제외하고는 (일부는 2000 셀까지 올라간다)

각 data.frame (slice1 .... slice40)에서 1 열을 가져 와서 새로운 data.frame에 넣기를 원한다. 새 data.frame에 열 이름을 지정하고 새 data.frame의 열 이름을 slice1 ... slice40으로 지정합니다.

이 구체적으로 요약 :

각 slice1-40에서

, 나는 AVGFP에서 모든 값을 새로운 data.frame에 넣어하려는 새로운 data.frame는 "AVGFP"라고한다 헤더가 "slice1, slice2, ..., slice40"인 40 개의 열이 있어야합니다. 하나의 슬라이스에서 발생하는 각 빈 셀에 "NA"가 다른 것보다 짧아야합니다.

정말 감사드립니다. 나는 apply, plyr, split, reshape, melt, mergeaggregate으로 운 좋게 주위를보고있다. 당신이 cellID로 일치 시키려면

+0

AVGFP의 값이 일치합니까? 'callID'에 따르면? –

답변

2

다음이 시도 : 당신은 단순히 함께 열을 붙여 넣을 경우

L <- lapply(stats, `[`, c("cellID","AVGFP")) 

AVGFP <- Reduce(function(x,y) 
     merge(x,y,by="cellID",all=TRUE,suffixes=c(ncol(x),ncol(x)+1)), L) 

names(AVGFP)[-1] <- paste0("slice", 1:40) 

는,이 시도 :

첫째는 dataframes의 최대 길이를 얻을 :

maxL <- max(sapply(stats, nrow)) 

이제 각 열이으로 확장되는 목록을 만듭니다. 최대 길이개의 :

L <- lapply(stats, function(x) c(x$AVGFP, rep(NA, maxL-nrow(x)))) 

매트릭스에서 함께 열을 넣어 :

M <- do.call(cbind, L) 

강제 변환을 dataframe에 :

names(AVGFP) <- paste0("slice", 1:40) 
:

AVGFP <- as.data.frame(M) 

원하는 이름을 추가합니다

+0

예비 제안서를 작성한 후 데이터가 멋지게 보입니다. GFP 데이터가있는 slice1 - slice40이라는 레이블이 붙은 40 개의 열과 데이터가없는 곳의 NA가 있습니다. "AVGFP <- Reduce (function (x, y) merge (x, y, by ="cellID ", 모두 = TRUE), L)" "이 오류가 발생했습니다 : match.names (clabs, 이름이 이전 이름 ​​ – user2813055

+0

@ user2813055와 일치하지 않음. 충돌하는 열 이름에 기본 접미사 ".x"와 ".y"를 추가하기 때문에'merge'에 문제가 있지만 확인하지 않습니다. 새 이름이 다른 열과 충돌하지 않는 경우해킹'suffixes = c (ncol (x), ncol (x) +1)'은'x '가 각 축소 단계에서 열 방향으로 성장하기 때문에이 문제를 수정합니다. 후속 조치에 대한 감사합니다. –

+0

. 나는이 일을하기위한 명령을 이해하는 데 어려움을 겪고있다. 초기에 작동했던 두 번째 명령을 걷는 것이 좋을까요? 나는 이것이 앞으로 나아갈 수있는 더 나은 이해를 줄 것이라고 믿는다. – user2813055