提问者:小点点

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


数据帧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个答案

匿名用户

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)