1

我有一个如下所示的数据集:

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

等等

我想将这些不同的行组合成一个长行,如下所示:

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"

请注意,您可能希望先将数据转换为字符,以防止前导零被修剪。

编辑:解决第一列的多个值

使用期望 data.frame 作为输入和分组变量plyrddply函数。然后我们使用与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
}

@Chase 答案好多了!

于 2011-12-13T16:08:15.610 回答