Переименование подмножеств переменных с использованием значения одной из этих переменных, зацикленное на произвольном количестве подмножеств переменных - PullRequest
1 голос
/ 03 июля 2019

У меня есть набор данных, который содержит (в дополнение к номерам идентификаторов наблюдений) переменные, каждая из которых имеет только одно значение, которое должно быть частью имени нескольких связанных переменных (см. Пример ниже). Вот миниатюрная версия набора данных:

df_input <- tribble(
~id,  ~name_code1, ~count1, ~value1, ~name_code2,  ~count2, ~value2,
1,    "A0000",       0,       0,       "A0001",         5,       200,
2,    "A0000",       1,       5,       "A0001",         2,       50,
3,    "A0000",       20,      3000,    "A0001",         3,       30, 
)

Итак, каждое подмножество переменных имеет name_code #, count # и value #, где переменные сгруппированы по одинаковому номеру #. Обратите внимание, что для данного # name_code # всегда принимает только одно значение, уникальный идентификатор для этого набора переменных. Я хотел бы, чтобы для произвольного числа #s можно было установить одно значение name_code'i 'в качестве префикса для имени каждой переменной' i ', а затем удалить' i 'из имен переменных.

Более кратко, я хотел бы получить это ...

tribble(
  ~id,   ~A0000_count, ~A0000_value, ~A0001_count, ~A0001_value,
1,          0,              0,        5,           200,
2,          1,              5,        2,           50,
3,         20,           3000,        3,           30, 
)

... и хотел бы иметь возможность сделать это без ручного переименования каждой переменной (и удаления переменных "_code #") по отдельности, поскольку у меня есть несколько сотен пронумерованных наборов переменных.

Действительно, я понятия не имею, с чего начать, за исключением простого переименования каждой переменной. Но в реальном наборе данных у меня есть несколько сотен наборов переменных для переименования таким образом, и я хочу минимизировать ошибки кодирования / орфографии. В основном, я понятия не имею, как: а) переименуйте одну переменную, используя значение другой переменной. б) перебрать несколько наборов переменных, как описано выше.

(Также: это не должен быть тибль, я просто делаю это, потому что это кажется мне более ясным визуально).

Спасибо за вашу помощь!

1 Ответ

0 голосов
/ 03 июля 2019

Я бы использовал tidyr, stringr и dplyr вот так:

library(tidyr)
library(dplyr)
library(stringr)
df_input %>% 
  gather(key, value, -id) %>% 
  mutate(
    key2 = if_else(str_detect(key, "name_code"), value, NA_character_),
    key3 = if_else(str_detect(key, "count") | str_detect(key, "value"), str_sub(key, 1, 5), NA_character_),
  ) %>% 
  fill(key2) %>% 
  filter(!is.na(key3)) %>% 
  mutate(
    key4 = paste(key2, key3, sep = "_"),
    value2 = as.numeric(value)
  ) %>% 
  select(-key, -value, -key2, -key3) %>% 
  spread(key4, value2)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...