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

Вот простой пример того, что я ищу:

До:

data.frame(
  Name = c("pusheen", "pusheen", "puppy"),
  Species = c("feline", "feline", "doggie"),
  Activity = c("snacking", "napping", "playing"),
  Start = c(1, 2, 3),
  End = c(11, 12, 13)
)

После:

data.frame(
  Name = c("pusheen", "puppy"),
  Species = c("feline", "doggie"),
  Activity1 = c("snacking", "playing"),
  Start1 = c(1, 3),
  End1 = c(11, 13),
  Activity2 = c("napping", NA),
  Start2 = c(2, NA),
  End2 = c(12, NA)
)

Как мне сделать это в Rили Excel? Спасибо!

1 Ответ

1 голос
/ 02 декабря 2019

Это можно сделать, используя pivot_wider из пакета tidyr.

library(tidyr)
library(dplyr)
library(magrittr)

df <- df %>% 
  group_by(Name) %>% 
  mutate(num = row_number()) %>% # Create a counter by group
  ungroup() %>%
  pivot_wider(
    id_cols = c("Name", "Species"), 
    names_from = num, 
    values_from = c("Activity", "Start", "End"), 
    names_sep = "")

Если вы хотите, чтобы результат был упорядочен, как в примере вывода, мы можем добавить дополнительный оператор select. Я использовал str_sub из пакета stringr, чтобы извлечь последний символ из каждого имени столбца, а затем отсортировал имена оттуда. Этот метод заказа столбцов должен распространяться на любое количество действий.

library(stringr)

df %>% 
  select(Name, Species, names(df)[order(str_sub(names(df), -1))])
...