2016-02-02 3 views
1

Я пытаюсь объединить две строки из кадра данных в R с подобным форматомзначения Соединить через два ряда в R

row1 <- c("A","B","C") 
row2 <- c(1:3) 
dat <- data.frame(rbind(row1,row2)) 
dat 
    X1 X2 X3 
row1 A B C 
row2 1 2 3 

Я хотел бы третий ряд типа

row3 A-1 B-2 C-3 

Может кто-то поможет мне сделать это с помощью функции вставки? Я пробовал следующее без успеха:

> paste(dat[1,], dat[2,], sep="-") 
[1] "2-1" "2-1" "2-1" 
> paste(as.character(dat[1,]), dat[2,], sep="-") 
[1] "2-1" "2-1" "2-1" 

Заранее благодарим за внимание!

+1

сделать ' dat [] <- lapply (dat, as.character) 'сначала, а затем попробуйте ваш первый подход. – A5C1D2H2I1M1N2O1R2T1

+0

спасибо, это отлично работает! Я ценю это – ZMacarozzi

ответ

2

Вот один подход:

rbind(dat, row3 = apply(dat, 2, paste0, collapse = "-")) 
#  X1 X2 X3 
#row1 A B C 
#row2 1 2 3 
#row3 A-1 B-2 C-3 

При условии, что вы предприняли необходимые шаги, чтобы избежать использования factor с, т.е.

row1 <- c("A","B","C") 
row2 <- as.character(1:3) 
dat <- data.frame(
    rbind(row1, row2), 
    stringsAsFactors = FALSE 
) 
+1

спасибо, это отлично работает! – ZMacarozzi

0

Один вариант с data.table

library(data.table) 
rbindlist(list(dat, setDT(dat)[, lapply(.SD, paste, collapse='-')])) 
# X1 X2 X3 
#1: A B C 
#2: 1 2 3 
#3: A-1 B-2 C-3 
Смежные вопросы