2016-07-26 37 views
1

我有一個多列數據框。我對兩欄感興趣。這兩列的值之間有很多關係。 例子:R總結了數據幀中兩列值之間的多對多關係

df = data.frame("A"=c(1,1,2,3,4,1,2),"B"=c("a","b","a","c","s","b","s")) 
> df 
A B 
1 a 
1 b 
2 a 
3 c 
4 s 
6 b 
7 a 

現在的結果將是

a -> 1,2,7 
b -> 1,6 
c- > 3 
s -> 4 

另外,我想然後保存爲R對象名單。所以下次我可以直接訪問他們,如果我說他們爲RObject,如果我輸入RObject $ a,那應該給我1,2,7等列表。

更新: 它可以正常工作〔實施例,但是當我試圖在下面的例子:

head(gf[,c(3,5)]) 
     V3   V5 
    DNAJC25-GNG10 GO:0004871 
    DNAJC25-GNG10 GO:0005834 
    DNAJC25-GNG10 GO:0007186 
    LOC100509620 GO:0005215 
    LOC100509620 GO:0006810 
    LOC100509620 GO:0016021 

一些如何在V3列轉換的數字? 它給

V5 V3 
GO:0004871 4283 
GO:0005215 8796 
+0

你是如何得到這些值的?你的'df'看起來不像那樣。 – user2100721

+0

您的示例與數據不匹配 –

回答

2

我們可以使用split這應該是非常快的。

split(df$A, df$B) 
#$a 
#[1] 1 2 7 

#$b 
#[1] 1 6 

#$c 
#[1] 3 

#$s 
#[1] 4 
1

試試這個

aggregate(data = df,.~B,FUN = paste,collapse=",") 
1

這裏是保存在名爲列表結果的方法:

temp <- aggregate(A~B, df, FUN=c) 
myList <- setNames(temp$A, temp$B) 

myList 
$a 
[1] 1 2 

$b 
[1] 1 1 

$c 
[1] 3 

$s 
[1] 4 2 

數據

df = data.frame("A"=c(1,1,2,3,4,1,2),"B"=c("a","b","a","c","s","b","s")) 
3
unstack(df) 
#$a 
#[1] 1 2 7 
# 
#$b 
#[1] 1 6 
# 
#$c 
#[1] 3 
# 
#$s 
#[1] 4 
相關問題