R - 将两个Address列熔化并作为新列进行转换

时间:2015-01-12 19:40:34

标签: r reshape2 melt

我在数据框中有两列代表地址。我需要融化这两个并重新组成一个列,并且我很难将头部缠绕在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)的所有数据的单列,那将是很好的。地址(显然)需要以当前形式保存。给出的一些答案是将数据混合在一起,以解决此问题的方式。

3 个答案:

答案 0 :(得分:2)

你可以尝试

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

答案 1 :(得分:1)

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

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的管道功能:<​​/ p>

> 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

答案 2 :(得分:0)

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

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