【问题标题】:How to merge each two columns into one and the number of columns into half如何将每两列合并为一列并将列数合并为一半
【发布时间】:2014-07-31 11:49:56
【问题描述】:

数据框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) 

【问题讨论】:

    标签: r merge dataframe


    【解决方案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)
    

    【讨论】:

    • 不错的答案。只是为了通用性,我建议使用grep("[0-9]", colnames(DF)) 而不是1:5grep("[A-Z]", colnames(DF)) 而不是6:10
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-02-14
    • 2021-07-21
    • 1970-01-01
    • 2014-05-09
    • 1970-01-01
    • 2020-04-24
    相关资源
    最近更新 更多