如何将几个列指示符变量合并为r中的“无空格”序列?

时间:2016-05-10 21:07:53

标签: r merge

这个问题与以前的帖子略有不同。我有几列随机指标变量,我想将它们合并为一个序列“没有空格”。我的数据如下。

  ID COL1 COL2 COL3 COL4 COL5 COL6 COL7
1  1    a    b    c    d    e    f    g
2  2    a    b    c    d    e    f    g
3  3    a    b    c    d    e    f    g
4  4    a    b    c    d    e    f    g
5  5    a    b    c    d    e    f    g
6  6    a    b    c    d    e    f    g
7  7    a    b    c    d    e    f    g
8  8    a    b    c    d    e    f    g

ID<-c(1,2,3,4,5,6,7,8)
COL1<-c('a','a','a','a','a','a','a','a')
COL2<-c('b','b','b','b','b','b','b','b')
COL3<-c('c','c','c','c','c','c','c','c')
COL4<-c('d','d','d','d','d','d','d','d')
COL5<-c('e','e','e','e','e','e','e','e')
COL6<-c('f','f','f','f','f','f','f','f')
COL7<-c('g','g','g','g','g','g','g','g')
df<-data.frame(ID,COL1,COL2,COL3,COL4,COL5,COL6,COL7)

我想要一个列来简单地合并其他列而没有空格。

  ID COL1 COL2 COL3 COL4 COL5 COL6 COL7   col1to4     col1to7    col3to5
1  1    a    b    c    d    e    f    g      abcd     abcdefg        cde 
2  2    a    b    c    d    e    f    g      abcd     abcdefg        cde
3  3    a    b    c    d    e    f    g      abcd     abcdefg        cde
4  4    a    b    c    d    e    f    g      abcd     abcdefg        cde
5  5    a    b    c    d    e    f    g      abcd     abcdefg        cde
6  6    a    b    c    d    e    f    g      abcd     abcdefg        cde
7  7    a    b    c    d    e    f    g      abcd     abcdefg        cde
8  8    a    b    c    d    e    f    g      abcd     abcdefg        cde

提前致谢。

2 个答案:

答案 0 :(得分:0)

df$col1to4 = apply(df[ , grep("COL[1-4]", names(df))], 1, paste, collapse="")

 df$col1to4 = apply(df[, paste0("COL", 1:4)], 1, paste, collapse="")

第一个使用正则表达式并且更灵活,但如果您的名字非常规则,您可以使用第二个保存一些键入。您也可以按位置引用列,但这似乎更容易出错。

其他人也一样:

df$col1to7 = apply(df[ , grep("COL[1-7]", names(df))], 1, paste, collapse="")

df$col3to5 = apply(df[ , grep("COL[3-5]", names(df))], 1, paste, collapse="")

答案 1 :(得分:0)

这应该有效:

df$col1to4<-paste0(df$COL1,df$COL2,df$COL3,df$COL4)
df$col1to7<-paste0(df$COL1,df$COL2,df$COL3,df$COL4,df$COL5,df$COL6,df$COL7)
df$col3to5<-paste0(df$COL3,df$COL4,df$COL5)