Конкатенация двух информационных кадров в R - PullRequest
1 голос
/ 23 октября 2019

Итак, скажем, у меня есть два фрейма данных с одинаковыми измерениями и именами столбцов:

library(tidyverse)

x <- tribble(
  ~x, ~y, ~z,
  1,2,3,
  2,3,4,
  3,4,5
)

y <- tribble(
  ~x, ~y, ~z,
  "a","b","c",
  "b","c","d",
  "c","d","e"
)

Как я могу объединить их для создания этого:

   # A tibble: 3 x 3
  x     y     z    
  <chr> <chr> <chr>
1 1a    2b    3c   
2 2b    3c    4d   
3 3c    4d    5e 

Моя первоначальная мысль быласделать что-то вроде этого, но это не работает:

paste0(x, y)

Ответы [ 2 ]

5 голосов
/ 23 октября 2019

Используйте map2 из purrr:

library(purrr)

map2_dfr(x, y, paste0)

, давая:

# A tibble: 3 x 3
  x     y     z    
  <chr> <chr> <chr>
1 1a    2b    3c   
2 2b    3c    4d   
3 3c    4d    5e   

Это можно сделать без каких-либо пакетов почти так же:

as.data.frame(mapply(paste0, x, y), stringsAsFactors = FALSE)

В R devel это можно записать так:

list2DF(mapply(paste0, x, y))
1 голос
/ 23 октября 2019

Также возможно в базе.

setNames(data.frame(sapply(1:3, function(i) paste0(x[,i], y[,i])), 
                    stringsAsFactors=FALSE), names(x))
#    x  y  z
# 1 1a 4d 7g
# 2 2b 5e 8h
# 3 3c 6f 9i

Данные

x <- structure(list(x = 1:3, y = 4:6, z = 7:9), class = "data.frame", row.names = c(NA, 
-3L))

y <- structure(list(x = structure(1:3, .Label = c("a", "b", "c"), class = "factor"), 
    y = structure(1:3, .Label = c("d", "e", "f"), class = "factor"), 
    z = structure(1:3, .Label = c("g", "h", "i"), class = "factor")), class = "data.frame", row.names = c(NA, 
-3L))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...