我有一个这种格式的框架
"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
可能可以使用重塑或重铸来完成,但我不确定如何将文本值保持在同一行。 谢谢!
答案 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]