R:使用标记为 var.1、var.2 的重复变量名称重塑数据框
R: reshape dataframe with duplicated variable names labeled 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
感谢您的帮助!
我们可以使用 data.table
中的 melt
在 measure
中使用多个 patterns
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
我希望在 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
感谢您的帮助!
我们可以使用 data.table
中的 melt
在 measure
patterns
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