2012-01-06 122 views
0

2個CSV文件,我有兩個CSV文件:R:結合基於匹配

csv1 <- data.frame(y=c("classA", "classB", "classA", "classB", "classA", "classC"), 
        DBID=c("d1", "d1", "d2", "d3", "d3", "d3")) 

     y DBID 
1 classA d1 
2 classB d1 
3 classA d2 
4 classB d3 
5 classA d3 
6 classC d3 

csv2 <- data.frame(tm=c("t1","t1","t2"), 
        y=c("classA","classC","classB")) 

    tm  y 
1 t1 classA 
2 t1 classC 
3 t2 classB 

我想提取信息,通過在這兩個CSV文件中匹配列y以獲得一個表,即

T1具有classA和classC在csv2文件中,所以在csv1(d1,d2和d3)中歸類爲classA的所有DBID都列在結果數據幀中,第一列中的t1爲d1,第二列中的d1,d2和d3爲

t2在csv2文件中具有B類,因此,在csv1中分類爲classB的所有DBID(d1和d3)都列在re在t2列出第一列的情況下產生數據幀,將d1和d3作爲第二列。

,並得到一個數據幀如下:

tm DBID endcol 
t1 d1 1 
t1 d2 1 
t1 d3 1 
t1 d3 1 
t2 d1 1 
t2 d3 1 

請指示如何與R.

回答

3

也許merge這樣做呢?

> merge(csv1,csv2) 
     y DBID tm 
1 classA d1 t1 
2 classA d2 t1 
3 classA d3 t1 
4 classB d1 t2 
5 classB d3 t2 
6 classC d3 t1 

您可以自己添加所有列的列。 merge是(默認情況下)基於具有相同名稱的列合併兩個,這就是爲什麼我不必傳遞任何其他參數。如果您有其他列名稱匹配,則需要明確指定by參數以獲取所需的行爲。