R:在组内无序重复的有序选择

时间:2017-07-29 18:09:11

标签: 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"))

可能,即使变量“element”是一个字符串,我也希望能有效的东西。 非常感谢。

1 个答案:

答案 0 :(得分:0)

您可以使用combn尝试tapply

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]
)

这也适用于角色数据,但不适用于因素(将转换为数字)。