我有一个包含多列的数据框。我对两个专栏感兴趣。这两列的值之间存在多对多的关系。 例如:
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 :(得分: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"))