Создание нового столбца, который является вектором других столбцов - PullRequest
0 голосов
/ 04 февраля 2019

У меня есть фрейм данных с двумя столбцами (V1 и V2), и я хотел бы создать еще один столбец, который является вектором - с помощью функции объединения: c () - принимая в качестве аргументов другие столбцы.

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

Я попытался создать новый столбец с функцией apply, но он возвращает вектор со всеми строками(не по строкам), что меня удивляет, потому что с другими функциями это работает по строкам.

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

Вот определение фрейма данных:

IDs <- structure(list(V1 = c("1", "1", "6"),
                      V2 = c("6", "8", "8")),
                 class = "data.frame",
                 row.names = c(NA, -3L)
                 )

Вот создание столбцов (вместе 1 - неправильный результат, а вместе 2 - хороший):

IDs <-
  IDs %>% 
  mutate(together1 = list(mapply(function (x,y) c(x,y), V1, V2))
        ) %>%
  rowwise() %>% 
  mutate(together2 = list(mapply(function (x,y) c(x,y), V1, V2))
        ) %>% 
  ungroup()

Вот результаты печати:

print(as.data.frame(IDs))

V1 V2        together1 together2
1  1  6 1, 6, 1, 8, 6, 8      1, 6
2  1  8 1, 6, 1, 8, 6, 8      1, 8
3  6  8 1, 6, 1, 8, 6, 8      6, 8

Заранее спасибо!

Ответы [ 3 ]

0 голосов
/ 04 февраля 2019

Вы только что пропустили SIMPLIFY = FALSE в вашем mapply() звонке:

dplyr::mutate(IDs, togeher = mapply(c, V1, V2, SIMPLIFY = F))

  V1 V2 togeher
1  1  6    1, 6
2  1  8    1, 8
3  6  8    6, 8
0 голосов
/ 04 февраля 2019

pmap может быть использовано здесь

library(tidyverse)
IDs %>% 
   mutate(together = pmap(unname(.), c)) 
#  V1 V2 together
#1  1  6     1, 6
#2  1  8     1, 8
#3  6  8     6, 8
0 голосов
/ 04 февраля 2019

Вы можете сделать это с помощью функции purrr map2:

library(dplyr)
library(purrr)

IDs %>% 
  mutate(together = map2(V1, V2, ~c(.x, .y)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...