在 R 中使用 reshape 时如何将多个值放在一行中?
How to put several values in one row when use reshape in R?
我有一个采用这种格式的框架
"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
可能可以通过重塑或重铸来完成,但我不确定如何将文本值保持在同一行中。
谢谢!
您可以使用 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=";")))
由于您的输出显示 B
仅出现一次 text4
,因此使用了 unique
。
我们可以使用data.table
library(data.table)
setDT(df1)[, .(y= toString(y)), by = x]
我有一个采用这种格式的框架
"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
可能可以通过重塑或重铸来完成,但我不确定如何将文本值保持在同一行中。 谢谢!
您可以使用 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=";")))
由于您的输出显示 B
仅出现一次 text4
,因此使用了 unique
。
我们可以使用data.table
library(data.table)
setDT(df1)[, .(y= toString(y)), by = x]