R: изменить форму кадра данных с дублированными именами переменных, помеченными как var.1, var.2

Я надеюсь изменить форму данных в R так, чтобы можно было обработать набор столбцов с дублированными именами, а затем переименовать в var, var.1, var.2, anothervar, anothervar.1, anothervar.2 и т. Д. в качестве независимых наблюдений. Я хотел бы, чтобы число, добавленное к имени переменной, использовалось в качестве наблюдения, чтобы я мог расплавить свои данные.

Например,

dat <- data.frame(ID=1:3, var=c("A", "A", "B"),
                  anothervar=c(5,6,7),var.1=c(C,D,E),
                  anothervar.1 = c(1,2,3))

> dat
  ID var anothervar var.1 anothervar.1
1  1   A          5     C            1
2  2   A          6     D            2
3  3   B          7     E            3

Как я могу изменить данные так, чтобы они выглядели следующим образом:

ID   obs   var   anothervar
1      1    A      5   
1      2    C      1  
2      1    A      6  
2      2    D      2    
3      1    B      7  
3      2    E      3  

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

2 ответа

Решение

Мы можем использовать melt от data.table это занимает несколько patterns в measure

library(data.table)
melt(setDT(dat), measure = patterns("^var", "anothervar"), 
      variable.name = "obs", value.name = c("var", "anothervar"))[order(ID)]
#    ID obs var anothervar
#1:  1   1   A          5
#2:  1   2   C          1
#3:  2   1   A          6
#4:  2   2   D          2
#5:  3   1   B          7
#6:  3   2   E          3

Что касается tidyverse Решение, мы можем использовать unite с gather

dat %>%
    unite("1", var, anothervar) %>%
    unite("2", var.1, anothervar.1) %>%
    gather(obs, value, -ID) %>%
    separate(value, into = c("var", "anothervar"))
#  ID obs var anothervar
#1  1   1   A          5
#2  2   1   A          6
#3  3   1   B          7
#4  1   2   C          1
#5  2   2   D          2
#6  3   2   E          3
Другие вопросы по тегам