在R中组合和反转具有缺失数据的多个文件

时间:2012-02-22 15:21:30

标签: 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

正如您所看到的,有些文件缺少数据(file2缺少C值,因此该文件中没有行C)。我希望将任何缺失的列报告为0。

我尝试使用data = lapply(filelist,read.table,sep =“\ 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

这不是我想要的。我希望字母是列,行是文件名。

2 个答案:

答案 0 :(得分: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 )

答案 1 :(得分:0)

您可以使用plyr包的rbind.fill()功能。基本上你会读入你的文件,用t()转置它们,然后使用rbind.fill将它们连接成一个大数据框。