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