我有一个如下所示的数据集:
CATA 1 10101
CATA 2 11101
CATA 3 10011
CATB 1 10100
CATB 2 11100
CATB 3 10011
等
我希望将这些不同的行组合成一个长行,如下所示:
CATA 101011110110011
CATB 101001110010011
我已尝试使用melt()然后使用dcast(),但它似乎不起作用。有没有人有一些简单的代码来做到这一点?
答案 0 :(得分:7)
查看paste
命令,特别是collapse
参数。目前尚不清楚如果/当你对第一列有不同的值时会发生什么,所以我不敢冒险猜测。如果你遇到困难,请更新你的问题。
dat <- data.frame(V1 = "CATA", V2 = 1:3, V3 = c(10101, 11101, 10011))
paste(dat$V3, collapse= "")
[1] "101011110110011"
请注意,您可能希望先将数据转换为字符,以防止修剪前导零。
编辑:解决第一列的多个值
使用plyr
的{{1}}函数,该函数需要data.frame作为输入和分组变量。然后,我们使用与之前相同的ddply
技巧以及paste()
。
summarize()
答案 1 :(得分: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答案要好得多!