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

Я хотел бы объединить каждый элемент фрейма данных с соответствующим элементом фрейма данных одинакового размера. Вот пример двух фреймов данных, которые мне нужно объединить:

# A tibble: 3 x 2
      X     Y
  <dbl> <dbl>
1     9     5
2     5    10
3     1     4

# A tibble: 3 x 2
  X     Y    
  <chr> <chr>
1 (10%) (5%) 
2 (3%)  (9%) 
3 (22%) (9%) 

И здесь будет вывод:

# A tibble: 3 x 2
  X       Y      
  <chr>   <chr>  
1 9 (10%) 5 (5%) 
2 5 (3%)  10 (9%)
3 1 (22%) 4 (9%)

Вот данные для первых двух объектов:

library(tidyverse)

structure(list(X = c(9, 5, 1), Y = c(5, 10, 4)), row.names = c(NA, 
-3L), class = c("tbl_df", "tbl", "data.frame"))

structure(list(X = c("(10%)", "(3%)", "(22%)"), Y = c("(5%)", 
"(9%)", "(9%)")), row.names = c(NA, -3L), class = c("tbl_df", 
"tbl", "data.frame"))

Спасибо за помощь!

Ответы [ 2 ]

2 голосов
/ 15 октября 2019

Мы можем использовать map2

library(purrr)
library(stringr)
map2_df(df1, df2, str_c, sep=" ")
# A tibble: 3 x 2
#  X       Y      
#   <chr>   <chr>  
#1 9 (10%) 5 (5%) 
#2 5 (3%)  10 (9%)
#3 1 (22%) 4 (9%) 
1 голос
/ 15 октября 2019

Используя ваши данные выше, я попробовал следующее с удачей.

Примечание. Я переименовал переменные, чтобы сделать привязку и объединение вызовов более понятными:

library(tidyverse)

dat1 <- structure(list(W = c(9, 5, 1), X = c(5, 10, 4)), row.names = c(NA, 
                                                               -3L), class = c("tbl_df", "tbl", "data.frame"))

dat2 <- structure(list(Y = c("(10%)", "(3%)", "(22%)"), Z = c("(5%)", 
                                                      "(9%)", "(9%)")), row.names = c(NA, -3L), class = c("tbl_df", 
                                                                                                          "tbl", "data.frame"))

dat3 <- cbind(dat1, dat2) %>% 
        unite('X2', c('W','Y')) %>% 
        unite('Y2', c('X','Z'))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...