我希望在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
谢谢您的帮助!
答案 0 :(得分:0)
我们可以使用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
答案 1 :(得分:0)
对于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