【问题标题】:R expand.grid() with data framesR expand.grid() 与数据框
【发布时间】:2014-10-20 14:52:32
【问题描述】:

我有一个关于使用两个数据框而不是两个向量的 expand.grid() 函数的问题。我想将两个数据框及其所有可能的组合组合在一起,同时简单地减去所有其他变量。比如……

df1 <- data.frame('USC', '2.3', '1.3', '5.4')
df2 <- data.frame('Texas', '1.2', '-1.4', '2.3')

所以基本上我可以使用 expand.grid() 函数获得第一个变量的所有组合,使其看起来像“USC Texas,Texas USC”等......但我也想减去或找到其余部分之间的差异数据框中关联的变量。比如……

('USC Texas', '1.1', '2.7', '3.1')
('Texas USC', '-1.1', -2.7', '-3.1')

我能否以某种方式将 expand.grid() 函数与 apply 结合起来?任何帮助将不胜感激

【问题讨论】:

    标签: r combinations


    【解决方案1】:

    这是一种方法:

    mapply(function(x, y) if (!grepl("^[+-]?\\d+\\.\\d+$", x)) 
             c(paste(x, y), paste(y, x)) else 
               c(res <- as.numeric(as.character(x)) - as.numeric(as.character(y)), 
                 -res), df1, df2)
    
    #      X.USC.      X.2.3. X.1.3. X.5.4.
    # [1,] "USC Texas" "1.1"  "2.7"  "3.1" 
    # [2,] "Texas USC" "-1.1" "-2.7" "-3.1"
    

    【讨论】:

      【解决方案2】:

      这是另一种方式:

      # clean up the data. Put df1 and df2 into one data.frame and convert the columns
      # to their natural data type. Name the columns.
      names(df2) <- names(df1)
      d <- rbind(df1, df2)
      names(d) <- letters[1:4]
      d[] <- lapply(d, function(col) type.convert(as.character(col)))
      #      a   b    c   d
      #1   USC 2.3  1.3 5.4
      #2 Texas 1.2 -1.4 2.3
      
      # get the cartesian product of d with itself
      x <- merge(d, d, by=character(0))
      x <- subset(x, a.x != a.y)
      x <- within(x, {
          a <- paste(a.x, a.y)
          b <- b.x - b.y
          c <- c.x - c.y
          d <- d.x - d.y
      })
      x[c('a', 'b', 'c', 'd')]
      #           a    b    c    d
      # 2 Texas USC -1.1 -2.7 -3.1
      # 3 USC Texas  1.1  2.7  3.1
      

      【讨论】:

      • 谢谢马特和斯文我都试过了,他们都工作了,我试图用 expand.grid() 来解决这个问题,但没想到会超出这个范围。感谢您的帮助!
      猜你喜欢
      • 1970-01-01
      • 2012-08-21
      • 2015-07-17
      • 1970-01-01
      • 1970-01-01
      • 2018-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多