R总结了数据帧中两列值之间的多对多关系

时间:2016-07-26 14:53:42

标签: r dataframe

我有一个包含多列的数据框。我对两个专栏感兴趣。这两列的值之间存在多对多的关系。 例如:

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

4 个答案:

答案 0 :(得分:3)

unstack(df)
#$a
#[1] 1 2 7
#
#$b
#[1] 1 6
#
#$c
#[1] 3
#
#$s
#[1] 4

答案 1 :(得分:2)

我们可以使用非常快的split

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

#$b
#[1] 1 6

#$c
#[1] 3

#$s
#[1] 4

答案 2 :(得分:1)

试试这个

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

答案 3 :(得分: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"))