2014-12-07 2 views
0

мне нравится совмещать некоторые столбцы data.frame в новую колонку, какобъединить data.frame столбцов для новых столбцов вектора имен

dat <- data.frame(
    color = sample(c("r","y","b"), 10, replace = TRUE), 
    year = sample(2011:2014, 10, replace = TRUE), 
    type = sample(c("early","mid","late"), 10, replace = TRUE)) 

dat$tot1 <- paste(dat$color, dat$year, dat$type) 

, который работает, но как я это делаю на основе имен столбцов?

cnames <- c("color","year","type") 

dat$tot2 <- do.call(paste, list(cnames,collapse="")) 

конечно, это обеспечивает только столбец с «coloryeartype» записей, а не такой же, как dat$tot1. Как бы вы это сделали? do.call(paste, list(get(cnames),collapse="")) сообщает об ошибке Error in get(cnames) : object 'color' not found

ТНХ Кристофа

ответ

1

Просто используйте

do.call(paste, dat[cnames]) 
#[1] "y 2011 mid" "r 2012 mid" "r 2013 late" "r 2014 mid" "r 2011 late" 
#[6] "b 2012 early" "y 2014 early" "r 2013 mid" "r 2011 late" "b 2014 early" 

Если вам нужно different разделителем

do.call(paste, c(dat[cnames], sep=",")) 
+0

Отлично, это легко, много спасибо – ckluss

+0

@ ChristofKluß Нет проблем. – akrun

0

Вот еще один способ -

apply(dat[cnames], 1, function(x){paste(x, collapse=" ")}) 
# [1] "b 2011 early" "r 2014 mid" "y 2012 early" "y 2013 late" "y 2011 late" 
    [6] "y 2014 late" "b 2011 mid" "b 2011 early" "b 2011 mid" "y 2013 late"