将多个列粘贴在一起

126

我有一个数据框中的许多列,我想将它们粘合在一起(用“-”分隔),如下所示:

data <- data.frame('a' = 1:3, 
                   'b' = c('a','b','c'), 
                   'c' = c('d', 'e', 'f'), 
                   'd' = c('g', 'h', 'i'))
i.e.     
     a   b   c  d  
     1   a   d   g  
     2   b   e   h  
     3   c   f   i  

Which I want to become:

a x  
1 a-d-g  
2 b-e-h  
3 c-f-i  

通常我可以使用以下方法完成此操作:

within(data, x <- paste(b,c,d,sep='-'))

然后删除旧列,但遗憾的是我不知道具体的列名,只有所有列的集合名称,例如我会知道 cols <- c('b','c','d')

有人知道如何做到这点吗?

11个回答

0
library(plyr)

ldply(apply(data, 1, function(x) data.frame(
                      x = paste(x[2:4],sep="",collapse="-"))))

#      x
#1 a-d-g
#2 b-e-h
#3 c-f-i

#  and with just the vector of names you have:

ldply(apply(data, 1, function(x) data.frame(
                      x = paste(x[c('b','c','d')],sep="",collapse="-"))))

# or equally:
mynames <-c('b','c','d')
ldply(apply(data, 1, function(x) data.frame(
                      x = paste(x[mynames],sep="",collapse="-"))))    

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接