1

次のようなデータセットがあります。

CATA 1 10101
CATA 2 11101
CATA 3 10011
CATB 1 10100
CATB 2 11100
CATB 3 10011

そして、これらの異なる行を次のように1つの長い行に結合したいと思います。

CATA 101011110110011
CATB 101001110010011

これをmelt()、次にdcast()で試しましたが、機能しないようです。誰かがこれを行うためのいくつかの簡単なコードを持っていますか?

4

2 に答える 2

7

pasteコマンド、特に引数を見てくださいcollapse。最初の列の値が異なる場合にどうなるかは明確ではないため、推測するつもりはありません。行き詰まった場合は、質問を更新してください。

dat <- data.frame(V1 = "CATA", V2 = 1:3, V3 = c(10101, 11101, 10011))
paste(dat$V3, collapse= "")
[1] "101011110110011"

先行ゼロがトリミングされないように、最初にデータを文字に変換することをお勧めします。

編集:最初の列の複数の値をアドレス指定する

plyrdata.frameを入力およびグループ化変数として期待するのddply関数を使用します。次に、以前と同じpaste()トリックを。とともに使用しsummarize()ます。

    library(plyr)
    dat <- data.frame(V1 = sample(c("CATA", "CATB"), 10, TRUE)
                    , V2 = 1:10
                    , V3 = sample(0:100, 10, TRUE)
                    )

    ddply(dat, "V1", summarize, newCol = paste(V3, collapse = ""))

    V1         newCol
1 CATA          16110
2 CATB 19308974715042
于 2011-12-13T15:38:56.943 に答える
0

のすべての可能な要素が既知でV1あると仮定すると、dat

elements <- c("CATA","CATB","CATC")
i <- 1
final_list <- c()
while (i <= length(elements)){
k <- grep(elements[i], dat$V1, ignore.case = FALSE, fixed = TRUE, value = FALSE)
m <- paste(dat$V1[k[1]], " ", paste(dat[k,3], collapse=""), sep="")
final_list <- c(final_list,m)
i=i+1
}

@チェイスの答えははるかに優れています!

于 2011-12-13T16:08:15.610 に答える