我有多个文件,其中的制表符分隔数据如下所示:
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
这不是我想要的。我希望字母是列,行是文件名。
答案 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将它们连接成一个大数据框。