#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