2012-02-22 52 views
1

反轉有缺失數據的多個文件我有多個文件與製表符分隔,看起來像這樣的數據:合併和R中

A 25 
B 50 
C 10 
D 30 

我想是反轉並結合他們。所以它看起來像這樣:

filename A B C D 
file1 25 50 10 30 
file2 20 15 0 10 
file3 60 20 30 0 

正如你可以看到有一些文件有丟失的數據(文件2缺少對C的值,所以在該文件中沒有列C)。我想有任何丟失的列報爲0

我試圖用數據= lapply(文件列表,函數read.table 09月=「\ t」的),但這只是給了我:

data 
[[1]] 
     V1  V2 
1   C 27660 
2   B  4 
3   E 40128 
4   D 4584 
5   G 43078 

[[2]] 
     V1  V2 
1   C 31530 
2   E 47978 
3   D 5268 
4   G 54636 

哪不是我想要的。我希望字母是列和行作爲文件名。

+0

如果文件並不都具有相同的列數,那麼您的示例文件如何提供足夠的信息以供我們制定解決方案?提供一個實際代表你的文件的例子是否有意義? – joran 2012-02-22 15:58:03

+0

閱讀你的文件,然後使用'合併' – Andrie 2012-02-22 16:44:32

+0

可合併使用超過2個文件? – helicase 2012-02-22 17:58:55

回答

0

您或許可以使用plyr包的rbind.fill()函數。基本上你會讀取你的文件,用t()轉置它們,然後使用rbind.fill將它們全部加入到一個大數據框中。

1

您可以將文件名添加到data.frames的新列中,並將它們連接起來並重新整理結果。

# Not run: 
# data <- lapply(filelist, read.table, sep = "\t") 
# names(d) <- filelist 

# Use sample data instead 
d <- list(
    file1 = data.frame(V1 = sample(LETTERS, 10), V2 = rpois(10,10)), 
    file2 = data.frame(V1 = sample(LETTERS, 10), V2 = rpois(10,10)), 
    file3 = data.frame(V1 = sample(LETTERS, 10), V2 = rpois(10,10)) 
) 

# Add the file name as a column 
for(i in names(d)) { 
    d[[i]] <- data.frame(file=i, d[[i]]) 
} 

# Concatenate everything 
d <- do.call(rbind, d) 

# Convert to wide format 
library(reshape2) 
dcast(d, file ~ V1, fill=0)