代码之家  ›  专栏  ›  技术社区  ›  Dee V

连接R中除最后两列以外的所有列

  •  1
  • Dee V  · 技术社区  · 7 年前

    是否有一种方法连接除R中最后两个以外的所有前导列值?

    下面是我的数据框架的一个片段

    DISEASE Gender  Race    Freq    NEWCOL
    Salmonellosis   M   RACE_LATINO_HISPANIC    1   NA
    Salmonellosis   F   BLACK_AFRICAN_AMERICAN  2   NA
    Salmonellosis   M   WHITE   3   NA
    Salmonellosis   M   WHITE   4   NA
    

    使用concatenate-incel获得的预期结果

    DISEASE Gender  Race    Freq    NEWCOL  Concat
    Salmonellosis   M   RACE_LATINO_HISPANIC    1   NA  Salmonellosis M RACE_LATINO_HISPANIC
    Salmonellosis   F   BLACK_AFRICAN_AMERICAN  2   NA  Salmonellosis F BLACK_AFRICAN_AMERICAN
    Salmonellosis   M   WHITE   3   NA  Salmonellosis M WHITE
    Salmonellosis   M   WHITE   4   NA  Salmonellosis M WHITE
    

    我试着在R中粘贴,但找不到一种方法可以忽略最后两列

    而且,列的数量会随着应用程序中的每次迭代而变化,因此我需要一个函数来忽略最后两列,而不是选择两个前导列

    3 回复  |  直到 7 年前
        1
  •  3
  •   Mark    7 年前

    这不是一个很好的解决方案,但是考虑到您的数据,您可以简单地使用 apply 把你的 data.frame 最后两列通过动态引用列数而关闭。

    df = readr::read_table2("DISEASE Gender  Race    Freq    NEWCOL
    Salmonellosis   M   RACE_LATINO_HISPANIC    1   NA
    Salmonellosis   F   BLACK_AFRICAN_AMERICAN  2   NA
    Salmonellosis   M   WHITE   3   NA
    Salmonellosis   M   WHITE   4   NA")
    
    df$Concat = apply(df[,1:(ncol(df)-2)],1,paste,collapse=" ")
    
        2
  •  2
  •   Dave2e    7 年前

    提德包有一个方便的 unite 执行此合并的函数:

    df<-read.table(header = TRUE, text="DISEASE Gender  Race    Freq    NEWCOL
    Salmonellosis   M   RACE_LATINO_HISPANIC    1   NA
    Salmonellosis   F   BLACK_AFRICAN_AMERICAN  2   NA
    Salmonellosis   M   WHITE   3   NA
    Salmonellosis   M   WHITE   4   NA")
    
    
    library(tidyr)
    answer<-unite(df, concat, -c("Freq", "NEWCOL"), sep = " ", remove=FALSE)
    
    #or to select by only the number of columns
    unite(df, concat, 1:(ncol(df)-2), sep = " ", remove=FALSE)
    
        3
  •  1
  •   akrun    7 年前

    或者我们可以用 interaction

    df$concat <- interaction(df[head(names(df), -2)], sep= " ")
    

    paste base R

    df$concat <- do.call(paste, df[head(names(df), -2)])