2013-09-28 22 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」 應該有40個標題爲「slice1,slice2,...,slice40」的列 每個空白單元中應該有一個「NA」,其由一個片段比另一個片段短。

我真的很感謝任何和所有的幫助。我一直在摸索apply,plyr,split,reshape,melt,mergeaggregate沒有運氣。

+0

AVGFP中的值是否匹配根據'callID'? –

回答

2

如果您想通過cellID匹配那就試試這個:

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)) 

現在創建一個列表,其中每列用擴展s到最大長度:

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

把列一起在一個矩陣:

M <- do.call(cbind, L) 

強制到數據幀:

AVGFP <- as.data.frame(M) 

添加你想要的名稱:

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

經過初步審視您的底部建議,數據看起來不錯!有40列標記爲切片1 - 切片40與GFP數據和NA,其中沒有數據。當我嘗試你的「AVGFP < - Reduce(函數(x,y)合併(x,y,by =」cellID「,all = TRUE)時,L)」建議我收到了這個錯誤:Error in match.names(clabs,名稱(xi)): 名稱與之前的名稱不匹配 – user2813055

+0

@ user2813055固定,因爲它將缺省後綴「.x」和「.y」添加到衝突列名稱中,所以這是「合併」問題,但不檢查如果新名稱與其他列不衝突。hack'suffixes = c(ncol(x),ncol(x)+1)'解決了這個問題,因爲在每個縮減步驟中'x'是逐列增長的。 –

+0

感謝您的跟進。我很難理解命令來完成這項工作。你介意通過最初工作的第二組命令嗎?我相信這會讓我更好地理解未來。 – user2813055