R - 从多个文件中剪切特定列并将它们全部绑定

时间:2016-07-22 13:50:03

标签: r subset

我有多个文件(30,制表符分隔),如下所示:

|target_id | length| eff_length| est_counts| tpm| |:------------|------:|----------:|----------:|--------:| |LmjF.27.1250 | 966| 823.427| 2932| 94.7314| |LmjF.09.0430 | 1410| 1267.430| 3603| 75.6304| |LmjF.13.0210 | 2001| 1858.430| 4435| 63.4897| |LmjF.28.0530 | 4083| 3940.430| 7032| 47.4778| |LmjF.16.1400 | 591| 448.577| 1163| 68.9761| |LmjF.29.2570 | 1506| 1363.430| 11135| 217.2770|

我正在尝试使用以下命令从所有这些文件中删除第五列30个文件:

fifth_colum_file1 = file1.csv[ , 5]

但我想让这个过程更加自动化。

我想要使用的文件具有所有模式&#34; bs_abundance&#34;因此我认为一个好的起点是加载我想要使用这样一个命令的所有文件:< / p>

temp = list.files(pattern="*bs_abundance")

或许我也可以将我想要使用的所有表格直接加载到工作空间中:

for(i in temp) { x <- read.table(i, header=TRUE, comment.char = "A", sep="\t") assign(i,x)
}

然后,如上所述,我想剪切每个文件的第五列,以便稍后将它们全部绑定到具有相同行数的另一个表。

2 个答案:

答案 0 :(得分:1)

将文件放入文件夹。对于这个例子,我们称之为temp。适当地设置您的工作目录或指定下面示例的完整路径。

cols  <- as.character()
files <- dir("temp")
for(i in files){
 # You didn't mention a file type, but let's say it's csv
 tmp  <- read.csv(files[i], header = T)
 tmp  <- tmp[, 5]
 cols <- cbind(cols, tmp) 
}

然后,您可以使用最终数据对象cbind cols windows-1252列。

答案 1 :(得分:0)

以下是使用lapply的方法,该方法假定文件夹中的每个文件具有相同的行数。

# get file names
files <- dir("temp")
# remove one file
files <- files[-which(files == "removeFileName")]
# get list of vectors from 29 files
myList <- lapply(files, function(i) {temp <- read.csv(i); temp[, 5]})
# get new data.frame
dfDone <- do.call(data.frame, myList)