2016-06-13 44 views
-1

我有这种格式如何在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 

大概可以重塑完成,或者重铸,但林不知道如何保持文本值在同一行。 谢谢!

+0

@thelatemail良好的渔获,答案有一点更普遍的(涉及多个列)。一个使用'paste(。,collapse =“;”)'的答案可能会回答这个问题。 – steveb

+0

谢谢。有时很难将想法从西班牙语转换为英语,并且在论坛的其他部分寻求更加困难的搜索。下次我会尽量多加小心。 – christian

回答

2

我们可以使用data.table

library(data.table) 
setDT(df1)[, .(y= toString(y)), by = x] 
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使用。