当在R中使用重塑时,如何将多个值放在一行中?

时间:2016-06-13 03:41:53

标签: r reshape

我有一个这种格式的框架

 "x" "y"
1 A text1
2 A text2
3 A text3
4 B text4
5 B text4
6 B text5
7 C text6

我需要转变为:

 "x" "y"    
1 A text1;text2;tex3
2 B text4;text5
3 C text6

可能可以使用重塑或重铸来完成,但我不确定如何将文本值保持在同一行。 谢谢!

2 个答案:

答案 0 :(得分:2)

您可以使用dplyr执行此操作,如下所示:

library(dplyr)

### Data is set from "dput" output.
data_xy <- structure(list(x = c("A", "A", "A", "B", "B", "B", "C"), y = c("text1", "text2", "text3", "text4", "text4", "text5", "text6")), class = "data.frame", .Names = c("x", "y"), row.names = c(NA, -7L))
data_xy %>%
    group_by(x) %>%
    summarise(y = paste(unique(y), collapse=";"))

##   x                 y
## 1 A text1;text2;text3
## 2 B       text4;text5
## 3 C             text6

## OR

data_xy %>%
    group_by(x) %>%
    summarise_each(funs(paste(unique(.), collapse=";")))

由于您的输出仅显示text4 B的一次unique,因此会使用{{1}}。

答案 1 :(得分:2)

我们可以使用data.table

library(data.table)
setDT(df1)[, .(y= toString(y)), by = x]