2016-07-26 36 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 
相关问题