【问题标题】:R: Ordered selection without repeatition within groups [duplicate]R:在组内没有重复的有序选择[重复]
【发布时间】:2017-07-29 18:09:10
【问题描述】:

假设我有一个按组划分的元素向量,我正在寻找一种方法来获得元素的有序选择,而无需按组重复。 这个例子可能会澄清:

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

可能,我更喜欢即使变量“元素”是字符串也可以工作的东西。 非常感谢。

【问题讨论】:

    标签: r


    【解决方案1】:

    你可以试试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]
    )
    

    这也适用于字符数据,但不适用于因子(将转换为数字)。

    【讨论】:

      猜你喜欢
      • 2015-03-04
      • 2021-05-18
      • 2021-12-09
      • 2016-05-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-03
      • 1970-01-01
      相关资源
      最近更新 更多