Добавление дополнительных строк на основе переменной группировки R

#r

#r

Вопрос:

Я хотел бы добавить больше строк в свой набор данных на основе переменной группировки. Прямо сейчас мои данные содержат 2 строки, но я бы хотел, чтобы 3 строки и переменная app были повторены для третьей строки.

Вот как выглядят мои данные в настоящее время:

 my_data <- data.frame(app = c('a','b'), type = c('blue','red'), code = c(1:2), type_2 = c(NA, 'blue'), code_2 = c(NA, 3))

app    type    code    type_2    code_2
a      blue    1       NA        NA
b      red     2       blue      3

  

Я бы хотел, чтобы данные выглядели так:

 app    type    code
a      blue    1       
b      red     2       
b      blue    3
  

Комментарии:

1. Вы пробовали что-нибудь? Похоже, что-то tidyr::pivot_longer можно сделать.

Ответ №1:

 library(data.table)
setDT(my_data)
res <- 
  melt(
    my_data,
    id.vars = "app",
    measure.vars = patterns(c("^type", "^code")),
    value.name = c("type", "code")
  )[!is.na(type), .(app, type, code)]
  

Ответ №2:

Используя tidyverse

 library(dplyr)
library(stringr)
library(tidyr)

my_data %>% 
   rename_at(vars(c(type, code)), ~ str_c(., "_1")) %>%
   pivot_longer(cols = -app, names_to = c(".value", "grp"), names_sep = "_",
        values_drop_na = TRUE) %>% select(-grp)
# A tibble: 3 x 3
#  app   type   code
#  <chr> <chr> <dbl>
#1 a     blue      1
#2 b     red       2
#3 b     blue      3