0

このデータフレームを変換するためにメルトアンブキャストを使用しようとしています

 knowngene                                           Meth
 uc003fia.3 cg00000108;0.864484486796394;0.928944704280193
 uc003cha.4 cg00000108;0.864484486796394;0.928944704280193
 uc003fhz.4 cg00000109;0.881060551674426;0.910939682196076
 uc003fhz.4 cg00000132;0.881060551674426;0.910939682196076
 uc003fia.3 cg00000109;0.881060551674426;0.910939682196076
 uc003fia.3 cg00000236;0.799251070221749;0.898656886868738

こんな感じで

 knowngene                                           Meth
 uc003fia.3 cg00000108;0.864484486796394;0.928944704280193;cg00000109;0.881060551674426;0.910939682196076;cg00000236;0.799251070221749;0.898656886868738
 uc003cha.4 cg00000108;0.864484486796394;0.928944704280193
 uc003fhz.4 cg00000109;0.881060551674426;0.910939682196076;cg00000132;0.881060551674426;0.910939682196076

しかし、特定の理由で、データ フレームを再形成できませんでした。最初にリストに変更したのでしょうか。

4

3 に答える 3

2

分割して適用すると、次のようになります。

lapply(split(x$Meth, x$knowngene), paste, collapse="; ")

$uc003cha.4
[1] "cg00000108;0.864484486796394;0.928944704280193"

$uc003fhz.4
[1] "cg00000109;0.881060551674426;0.910939682196076; cg00000132;0.881060551674426;0.910939682196076"

$uc003fia.3
[1] "cg00000108;0.864484486796394;0.928944704280193; cg00000109;0.881060551674426;0.910939682196076; cg00000236;0.799251070221749;0.898656886868738"

その結果、すべてのテキストが必要な方法で連結された名前付きリストが作成されます。names()andを使用して、データ フレームに変換できますunname()

data.frame(knowngene=names(x), Meth=unlist(unname(x)))

   knowngene
1 uc003cha.4
2 uc003fhz.4
3 uc003fia.3
                                                                                                                                            Meth
1                                                                                                 cg00000108;0.864484486796394;0.928944704280193
2                                                 cg00000109;0.881060551674426;0.910939682196076; cg00000132;0.881060551674426;0.910939682196076
3 cg00000108;0.864484486796394;0.928944704280193; cg00000109;0.881060551674426;0.910939682196076; cg00000236;0.799251070221749;0.898656886868738
于 2012-11-20T12:26:23.333 に答える
1

必要なだけのようですaggregate()

まず、あなたのデータ:

myDF <- read.table(header = TRUE, text = "knowngene   Meth
uc003fia.3 cg00000108;0.864484486796394;0.928944704280193
uc003cha.4 cg00000108;0.864484486796394;0.928944704280193
uc003fhz.4 cg00000109;0.881060551674426;0.910939682196076
uc003fhz.4 cg00000132;0.881060551674426;0.910939682196076
uc003fia.3 cg00000109;0.881060551674426;0.910939682196076
uc003fia.3 cg00000236;0.799251070221749;0.898656886868738")

第二に、集計:

aggregate(Meth ~ knowngene, myDF, paste, collapse=";")
#    knowngene                                                                                                                                         Meth
# 1 uc003cha.4                                                                                               cg00000108;0.864484486796394;0.928944704280193
# 2 uc003fhz.4                                                cg00000109;0.881060551674426;0.910939682196076;cg00000132;0.881060551674426;0.910939682196076
# 3 uc003fia.3 cg00000108;0.864484486796394;0.928944704280193;cg00000109;0.881060551674426;0.910939682196076;cg00000236;0.799251070221749;0.898656886868738
于 2012-11-20T17:06:57.667 に答える
1

試す

cast(knowngene ~ ., data = your.data.frame, value = "Meth", 
    function = paste, sep = ";")
于 2012-11-20T15:53:28.943 に答える