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

连接R中除最后两列以外的所有列,r,paste,R,Paste,除了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 N

除了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
使用CONTAINATE inexcel获得的所需结果

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中粘贴,但找不到忽略最后两列的方法


此外,在我的应用程序中,列的数量会随着每次迭代而变化,因此我需要一个函数,该函数忽略最后两列,而不是选择两个前导列。这不是一个优雅的解决方案,但考虑到您的数据,您只需使用
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=" ")

tidyr软件包有一个方便的
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)

df或者我们可以使用
交互

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

你是不是在试着
df$Concat是的,我是,但问题是,就这个例子而言,它是疾病、性别和种族的Concat;在下一个例子中,它可能只是疾病和性别,这是因为此代码是闪亮应用程序的一部分,用户在其中进行选择,结果被聚合,然后可能
df$Concat,那么
tidyr
中的
unite
功能是否有用:
df
df$concat <- do.call(paste, df[head(names(df), -2)])