【问题标题】:Filtering according to combination of matching data across variables in R根据R中跨变量的匹配数据组合进行过滤
【发布时间】:2020-07-02 15:06:24
【问题描述】:

我有一个大型数据框,其中包括来自使用melt() 转换的距离矩阵的变量对。有点像这样:

 library(tibble)

 df <- tribble(~Word1, ~Word2, ~distance, ~speaker, ~session,
          "WordA", "WordX", 1.4, "JB", 1,
          "WordB", "WordY", 2.1, "JB", 1,
          "WordC", "WordZ", 4.7, "JB", 1,
          "WordX", "WordA", 0.23, "JB", 1,
          "WordY", "WordB", 2.3, "JB", 1,
          "WordZ", "WordC", 0.51, "JB", 1)

如示例中,每对单词组合出现两次,但变量被翻转(即WordA 和WordX 同时出现两次,每次出现一次为Word1,一次出现为Word2)。

我找到了this solution,并尝试了这两个建议:

 library(dplyr)
 df %>% distinct(Word1, Word2, distance, speaker, session)

只复制相同的数据帧,不过滤掉匹配变量组合的实例

还有filter(!duplicated(Word1, Word2, distance, speaker, session),它基本上只会让 R 崩溃。

【问题讨论】:

    标签: r dplyr


    【解决方案1】:

    您可以在此之后的Group栏中filter,

    df <-as.data.frame(df)
      
    df$v <- sapply(seq(df[,1]),function(x)
             paste(sort(c(df[x,1],df[x,2])),collapse=""))
    l <- data.frame(v=unique(df$v),
                Group=paste0("Group",seq(unique(df$v))))
    df <- merge(df,l,by="v")[,-1]
        
    df
    
      Word1 Word2 distance speaker session  Group
    1 WordA WordX     1.40      JB       1 Group1
    2 WordX WordA     0.23      JB       1 Group1
    3 WordB WordY     2.10      JB       1 Group2
    4 WordY WordB     2.30      JB       1 Group2
    5 WordC WordZ     4.70      JB       1 Group3
    6 WordZ WordC     0.51      JB       1 Group3
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-03-04
      • 2021-10-20
      • 2020-07-30
      • 2021-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多