【问题标题】:R - Melting two Address columns and casting as new columnR - 熔化两个地址列并转换为新列
【发布时间】:2015-01-12 19:40:34
【问题描述】:

我在一个数据框中有两列代表地址。我需要将两者融合并重铸为单列,并且无法将我的头缠绕在 reshape2 周围。示例:

          A                     B
    123 address st        122 address st
    125 address st        124 address st 
    127 address st        126 address st

我需要这个作为输出

          C
    122 address st
    123 address st 
    125 address st
    124 address st
    127 address st
    126 address st

编辑:让我更具体一点:顺序无关紧要,我正在处理的数据框中有很多列,而不仅仅是需要合并的两列。如果可以创建一个新的、单独的数据框,该数据框是一个包含来自地址列 1 (A) 和地址列 2 (B) 的所有数据的单列,那就太好了。地址(显然)需要以当前形式保存。给出的一些答案是以确实解决此问题的方式将数据混合在一起。

【问题讨论】:

    标签: r reshape2 melt


    【解决方案1】:

    你可以试试

    data.frame(C=c(t(df)), stringsAsFactors=FALSE)
     #             C
     #1 123 address st
     #2 122 address st
     #3 125 address st
     #4 124 address st
     #5 127 address st
     #6 126 address st
    

    【讨论】:

      【解决方案2】:

      熔化和重铸还将保留原始数据来自哪一列。如果您仍然需要该信息,但不需要作为单独的列,这很有用。例如:

      library(reshape2)
      A <- c('123 address st', '125 address st', '127 address st')
      B <- c('122 address st', '124 address st', '126 address st')
      DF <- data.frame(A, B, stringsAsFactors = FALSE)
      DF2 <- melt(data = DF, value.name = 'C', measure.vars = c('A', 'B'))
      

      会回来

      > DF
                     A              B
      1 123 address st 122 address st
      2 125 address st 124 address st
      3 127 address st 126 address st
      
      > DF2
        variable              C
      1        A 123 address st
      2        A 125 address st
      3        A 127 address st
      4        B 122 address st
      5        B 124 address st
      6        B 126 address st
      

      如果您需要对其进行排序,您可以很容易地使用 dplyr pacakge:

      library(dplyr)
      arrange(DF2, C)
      

      返回:

        variable              C
      1        B 122 address st
      2        A 123 address st
      3        B 124 address st
      4        A 125 address st
      5        B 126 address st
      6        A 127 address st
      

      如果你想删除那个讨厌的 variable 列,你也可以使用 dplyer。使用它基于magrittr 的管道功能:

      > DF3 <- select(DF2, C) %>% arrange(C)
      > DF3
                     C
      1 122 address st
      2 123 address st
      3 124 address st
      4 125 address st
      5 126 address st
      6 127 address st
      

      【讨论】:

        【解决方案3】:

        这可能比您想象的要容易。需要堆叠列吗?

        df2 = data.frame(C=rbind(df$A, df$B))
        

        【讨论】:

        • 看起来 OP 想要保留订单,所以这并不完全有效。
        猜你喜欢
        • 2010-12-05
        • 2018-03-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多