2012-09-27 73 views
0

我有40個CSV文件。每一個都有一列名字。在每個名稱列中,可能會重複相同的名稱(總共,名稱列平均有20,000行,大約一半是唯一的)。我想創建出現在多個文件中的名稱列表(同時被告知出現在哪個文件中)。如果同一名稱出現在多個文件中,我想知道每個文件的名稱。提取R中的唯一字符串

所以,在小範圍內:

File1 
    Name 
    John 
    Peter 
    Abby 
    John 


    File2 
    Mike 
    Tim 
    John 
    Anothername 


    File3 
    Me 
    Mike 
    Adam 
    Eve 

我所需的輸出會是這樣的:

data.frame 
Names   File 
John   1 
John   2 
Mike   2 
Mike   3 

回答

1

這裏有一個方法,如果你把所有的CSV到一個列表喲可能採取:

#generate a fake data set easy to work with 
LIST <- lapply(rpois(10, 10), function(i)data.frame(id=1:i, state=sample(state.name, i))) 

#add the file number as a column 
v <- lapply(1:length(LIST), function(i)data.frame(LIST[[i]], file=rep(i, nrow(LIST[[i]])))) 

#make one big data frame 
dat <- do.call(rbind, v)[, -1] 

#reorder said data frame 
dat[order(dat$state, dat$file), ] 
+0

這需要我大部分的方式。但是,我如何修改它以首先從每個文件包含的較大數據框中提取名稱列? – cianius

+0

考慮到每個文件中都有大約20,000個名字,data.frame變得太大而無法處理。第一個文件的長度(唯一(file_name $ Name))是9483的一個因子。當我將它轉換爲列表以便我可以在數據框中使用它時,R會崩潰。 – cianius

+0

它確定。我想出瞭如何去做。儘管謝謝!我從你的答案中瞭解到了一點! – cianius