假设我有一个按组分组的元素向量,我正在寻找一种方法来获得有序的元素选择,而无需按组重复。 这个例子可能会澄清:
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”是一个字符串,我也希望能有效的东西。 非常感谢。
答案 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]
)
这也适用于角色数据,但不适用于因素(将转换为数字)。