Это решение использует pivot_longer и pivot_wider из пакета tidyr. Если вы ранее использовали tidyr или tidyverse, я бы порекомендовал проверить, что у вас установлена версия tidyr 1.0.0, или просто переустановить tidyr ...
Итак, во-первых, я рекомендую взглянуть на эту статью, когдаВы получаете шанс, это дает большую помощь: https://tidyr.tidyverse.org/articles/pivot.html
Рабочий процесс довольно прост. Сначала нам нужно сделать ваши очень широкие данные длинными. Во-вторых, нам нужно разделить столбцы переменных и элементов. Затем, наконец, мы можем снова развернуть ширину, используя только столбец переменных
# Create dummy data
x <- tibble(
var = c('Variable 1 for item 1', 'Variable 2 for item 1',
'Variable 3 for item 1', 'Variable 4 for item 1',
'Variable 1 for item 2', 'Variable 2 for item 2',
'Variable 3 for item 2', 'Variable 4 for item 2'),
results = c(runif(8))) %>%
mutate(subject = row_number())
# Pivot the table wider to replicate the description.
# I could have written it this way, but I thought it might
# take longer ...
x_wide <- x %>%
pivot_wider(names_from = var,
values_from = results)
# This is the actual part you care about
x_long <- x_wide %>%
# So first we need to make the table longer, so that
# we can manipulate the column names into something workable
pivot_longer(cols = starts_with('Variable'),
names_to = 'var',
values_to = 'val') %>%
# Next we need to separate the column name into variable and item
separate(var, into = c('variable', 'item'),
sep = 'for') %>%
# This is just cleaning up the item and variable columns
mutate(item = str_remove(item, 'item'),
item = str_trim(item, side = 'both'),
variable = str_trim(variable, side = 'both')
) %>%
# lastly we pivot wide again but this time only on the variable
pivot_wider(names_from = variable,
values_from = val)
Надеюсь, это поможет! Мне пришлось сделать много предположений о том, как выглядят данные. Буду рад продолжить, если я ошибся.