如何将每两列合并为一列,将列数合并为一半

时间:2014-07-31 11:49:57

标签: r merge dataframe

数据框df:

  0 1 2 3 4 A B C D E 
1 0 1 1 0 0 a b d s e     
2 0 0 1 0 0 a w d d e     
3 0 0 1 1 0 a c w d e

有没有什么方法可以通过合并每两列对应的索引号和字母将数据帧转换为新的数据帧?

  0(A) 1(B) 2(C) 3(D) 4(E) 
1 0(a) 1(b) 1(d) 0(s) 0(e)     
2 0(a) 0(w) 1(d) 0(d) 0(e)   
3 0(a) 0(c) 1(w) 1(d) 0(e) 

1 个答案:

答案 0 :(得分:5)

paste0mapply

一起使用
DF <- read.table(text="  0 1 2 3 4 A B C D E 
1 0 1 1 0 0 a b d s e     
2 0 0 1 0 0 a w d d e     
3 0 0 1 1 0 a c w d e", header=TRUE, check.names=FALSE)

DF1 <- as.data.frame(mapply(function(x, y) paste0(x, "(", y, ")"), 
                            DF[, 1:5], DF[, 6:10]))
names(DF1) <- paste0(names(DF1), "(", names(DF[, 6:10]), ")")

#  0(A) 1(B) 2(C) 3(D) 4(E)
#1 0(a) 1(b) 1(d) 0(s) 0(e)
#2 0(a) 0(w) 1(d) 0(d) 0(e)
#3 0(a) 0(c) 1(w) 1(d) 0(e)