2013-02-08 167 views
0

我有一個文件,該文件是txt格式,並通過標籤分隔的,下面是摘錄:如何刪除並保留R中某個txt文件的某些列?

id  1  2  4  15  18  20 
1_at 100 200 89 189  299  788 
2_at  8 78 33  89  90  99 
3_xt 300 45 53 234  89  34 
4_dx 49 34 88  8  9  15 

現在我有一個文件,也txt格式,並與逗號分離具有以下數據:

18,1,4,20 

因此,基於這個文件,我想從第一列數據讀取它,而只提取列,所以我可以在這樣的另一個文件存儲:

(重要的是:我需要保持數據的順序根據csv文件存儲)

id  18  1  4  20 
1_at 299  100 89  788 
2_at 90  8 33  99 
3_xt 89  300 53  34 
4_dx  9  49 88  15 

如果我想提取將是行中的數據會因爲我比較容易可以逐行閱讀並與我的txt文件比較(我已經完成),但我堅持使用這個列的東西。

我不知道是否有任何方式使用一些分類指數函數來提取,直接列?

任何幫助將不勝感激。

+0

[你有什麼試過?](http://whathaveyoutried.com) – 2013-02-08 15:50:50

+1

列名不能以數字開頭。 – 2013-02-08 15:53:13

+0

@Jack梅尼我有一個類似的問題是什麼,我想提取的事情是從行,所以我用了兩個迴路一個讀取TXT文件,另一個是讀取表格格式。依次進行比較,當數據與我存儲在另一個文件中時匹配。有了這些東西我不知道我該怎麼做。也許只有先調換數據一樣,如果其行,然後再次轉置對待它,但該文件是巨大的,所以我不認爲這是一個很好的解決方案 – Layla 2013-02-08 15:55:46

回答

2

做你想做的事,如果你不想讀整個文件,然後過濾什麼的這一種方式。如果您事先不知道每一列的類別,這種方法也可以工作。 此示例假設輸入文件中有列名,因爲它是不允許R. 它將以數字作爲列名工作爲好,但要謹慎,因爲它可能在其他操作失敗沒有開始位數。

> txt = 'id  1  2  4  15  18  20 
+ 1_at 100 200 89 189  299  788 
+ 2_at  8 78 33  89  90  99 
+ 3_xt 300 45 53 234  89  34 
+ 4_dx 49 34 88  8  9  15' 
> 
> df <- read.table(textConnection(txt), header=T, nrows=1, check.names=F) 
> 
> df 
    id 1 2 4 15 18 20 
1 1_at 100 200 89 189 299 788 
> 
> #Lets say f is the column filter you read from other file 
> f <- c("id", "18", "1", "4", "20") 
> 
> f 
[1] "id" "18" "1" "4" "20" 
> 
> #Get Column Classes 
> CC <- sapply(df, class) 
> CC 
     id   1   2   4  15  18  20 
"factor" "integer" "integer" "integer" "integer" "integer" "integer" 
> #Specify columns that you don't want to read as "NULL" 
> CC[!names(CC) %in% f] <- "NULL" 
> CC 
     id   1   2   4  15  18  20 
"factor" "integer" "NULL" "integer" "NULL" "integer" "integer" 
> 
> #Read whole data frame again 
> df <- read.table(textConnection(txt), header=T, colClasses=CC, check.names=F) 
> 
> #get columns in desired order 
> df[,f] 
    id 18 1 4 20 
1 1_at 299 100 89 788 
2 2_at 90 8 33 99 
3 3_xt 89 300 53 34 
4 4_dx 9 49 88 15 
+0

謝謝,但如果數據是在一個文件中,我不能使用read.table,我該如何處理? – Layla 2013-02-08 16:59:10

+0

參見'read.table'。 'read.table'可以利用文件名輸入 – 2013-02-08 17:00:16

+0

@Manuel如果您滿意的答案千萬要記得將其標記爲接受 – 2013-02-08 17:22:51

相關問題