Объединить два фрейма данных с одинаковыми именами столбцов в один с вектором двух значений - PullRequest
0 голосов
/ 22 января 2019

У меня есть два кадра данных, один из текстов, другой рейтинг:

structure(list(Jessica = "tame.", Ashley = "The only"), .Names = c("Jessica", 
"Ashley"), row.names = c(NA, -1L), class = c("tbl_df", "tbl", 
"data.frame"))

structure(list(Jessica = 3L, Ashley = 1L), .Names = c("Jessica", 
"Ashley"), row.names = c(NA, -1L), class = c("tbl_df", "tbl", 
"data.frame")

)

Я надеюсь создать фрейм данных, в котором каждая ячейка является вектором двухзначения, чтобы я мог легко преобразовать в файл JSON с текстом и рейтингами под тем же ключом.

Вот как это должно выглядеть:

structure(list(list = list(c("tame.", "3", "The only", "1"))), class = "data.frame", row.names = c(NA, 
-1L), .Names = "list")

Ответы [ 2 ]

0 голосов
/ 24 января 2019
library(tidyverse)

ds1 <- structure(list(Jessica = "tame.", Ashley = "The only"), .Names = c("Jessica", 
"Ashley"), row.names = c(NA, -1L), class = c("tbl_df", "tbl", 
"data.frame"))

ds2 <- structure(list(Jessica = 3L, Ashley = 1L), .Names = c("Jessica", 
"Ashley"), row.names = c(NA, -1L), class = c("tbl_df", "tbl", 
"data.frame")
)

ds2 <- ds2 %>% mutate_all(as.character)

ds3 <- bind_rows(ds1, ds2)

(ds4 <- 
    ds3 %>% 
    gather(Jessica:Ashley, key = name, value = value) %>% 
    group_by(name) %>% 
    summarise(list = list(value)) %>% 
    ungroup() %>% 
    select(list)
)

ds4$list[1]
0 голосов
/ 22 января 2019

Вы можете сначала преобразовать в long (gather) и объединить, т.е.

library(tidyverse)

d1 %>% 
 gather(var, val) %>% 
 left_join(d2 %>% gather(var, val), by = 'var')

что дает,

# A tibble: 2 x 3
  var     val.x    val.y
  <chr>   <chr>    <int>
1 Jessica tame.        3
2 Ashley  The only     1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...