2016-06-13 43 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使用。