2017-07-29 17 views
0

私は要素のベクトルをグループで分けていると言います。私は、グループによって反復せずに要素の順序付き選択を得る方法を探しています。 例は、おそらく明確にします:R:グループ内で反復なしの順序付き選択

group<-c("a","a","a","b","b","b") 
element<-c(1,2,3,1,2,3) 
data<-data.frame(group,element) 

を私が取得したいと思います:

group<-c("a","a","a","b","b","b") 
element.x<-(1,1,2,1,1,2) 
element.y<-(2,3,3,2,3,3) 
data<-data.frame(group, element.x,element.y) 

私はdplyrからleft_joinで動作するように試みたが、それは私のすべての組み合わせ(すなわち(1,2)を与えます(2,1)それは私が探しているものではない)。

require(dplyr) 
data<- data %>% 
left_join(data , by=c("group")) 

おそらく、変数「要素」が文字列であっても、私は何かできることがあります。 ありがとうございました。

答えて

0

combntapplyと試してみることができます。

group <- c("a","a","a","b","b","b") 
element <- c(1,2,3,1,2,3) 
data <- data.frame(group,element) 

# get per group, all unique combinations 
combinations <- tapply(data$element, data$group, combn, 2) 

# get number of unique combinations per group 
nPerComb <- sapply(combinations, NCOL) 

# bind combinations to a matrix 
elements <- t(do.call(cbind, combinations)) 

# fill dataframe with new information 
data2 <- data.frame(
    group = rep(unique(data$group), nPerComb), 
    element.x = elements[, 1], 
    element.y = elements[, 2] 
) 

これは文字データでも機能します(数値は数値に変換されます)。