三个文本文件位于同一目录中(" data001.txt"," data002.txt"," data003.txt")。我写了一个循环来读取每个数据文件并生成三个数据表;
rbind
所以,让我们说每个表看起来像这样:
combined <- do.call(rbind, mget(ls(pattern="^data")))
我已使用 var1 var2 var3
row1 2 1 3
var1 var2 var3
row1 3 2 4
var1 var2 var3
row1 1 3 5
组合所有表格...
colnames(combined) = combined[1, ] # make the first row the column names
combined <- combined[-1, ] # delete the now-unnecessary first row
toDelete <- seq(1, nrow(combined), 2) # define which rows to be deleted i.e. every second odd row
combined <- combined[ toDelete ,] # delete them suckaz
得到这样的东西:
var1 var2 var3
row1 2 1 3
row1 3 2 4
row1 1 3 5
给我留下多余的列名。目前我可以通过删除包含列名的特定行来解决这个问题,但它有点笨拙。
data001.txt <- as.matrix(data001.txt[2,])
data001.txt <- t(data001.txt)
combined <- rbind(data001.txt, data002.txt)
这确实给了我想要的东西......
v1 v2 v3
2 1 3
3 2 4
但我觉得更好的方法就是提取&#34; row1&#34;作为向量或列表或其他什么,并将它们组合在一起成为一个数据表。我觉得有一个快速简便的方法可以做到这一点,但我还没有找到任何东西。我看了here和here以及here。
一种可能性是采取第二行(我想要的),并将其转换为矩阵(然后将其转置为行而不是列!?)和rbind:
{{1}}
除了没有列名标题(例如va1,var2,var3)之外,这或多或少地给了我想要的东西。
{{1}}
有什么想法吗?如果有某种方法添加列名,第二种方法是否可以正常工作?我觉得它比第一种方法更不笨重。感谢您的任何意见:)
编辑 - 在下面的答案中解决。
答案 0 :(得分:0)
想出来。转换为数据矩阵并使用所需的data.table包中的set.names
。假设您有一系列文本数据文件,如下所示,并且您只想提取第七列(带有数字而不是字母的那一列),并将它们组合在一起,放在他们自己的数据表中,包括行名称: / p>
chemical1 a b c d e 1 g h i j k l m
chemical2 a b c d e 2 g h i j k l m
chemical3 a b c d e 3 g h i j k l m
chemical4 a b c d e 4 g h i j k l m
chemical5 a b c d e 5 g h i j k l m
设置row.names = 1
和header = F
。
setwd("directory")
files <- list.files(pattern = "data") # take all files with 'data' in their name
for(i in files) {
x <- read.delim(i, row.names = 1, header = F, sep = "\t", na = "*")
setnames(x, 6, i) # if the data you want is in column six. Sets data file name as the column name.
x <- as.matrix(x[6]) # just take the sixth column with the numeric data (delete everything else)
x <- t(x) # transform (if you want..)
assign(i,x)
}
combined <- do.call(rbind, mget(ls(pattern="^data"))) # combine the data matrices into one table
write.table(combined, file="filename.csv", sep=",", row.names=T, col.names = NA)