我有一个宽格式的数据集,如下所示:
header 1 x x x y y z z
header 2 1 2 3 1 2 1 2
2015 3.0 4.0 2.0 3.1 2.1 2.3 2.1
2016 2.0 4.4 1.0 2.1 3.1 5.3 0.1
...
我想将其更改为长格式,如下所示:
header 1 variable 1 2 3
2015 x 3.0 4.0 2.0
2015 y 3.1 2.1 N/A
2015 Z 2.3 2.1 N/A
2016 ...
这是我的方法:
melt()
函数和但是,这不起作用,因为melt
函数将我的角色更改为因子,然后我无法将它们分开。任何人都可以帮助或建议更好的方法吗?
答案 0 :(得分:0)
数据强>
d <- read.table(header = FALSE, stringsAsFactors = FALSE,
text = "header1 x x x y y z z
header2 1 2 3 1 2 1 2
2015 3.0 4.0 2.0 3.1 2.1 2.3 2.1
2016 2.0 4.4 1.0 2.1 3.1 5.3 0.1")
连接前两行
names(d)[-1] <- paste(d[1, -1], d[2, -1], sep = ".")
d.new <- d[-(1:2), ]
融化&amp;投强>
d.m <- melt(d.new, "V1", variable_name = "var")
cast(cbind(d.m, colsplit(d.m$var, split = "\\.", names = c("variable",
"number"))), V1 + variable ~ number)
# V1 variable 1 2 3
# 1 2015 x 3.0 4.0 2.0
# 2 2015 y 3.1 2.1 <NA>
# 3 2015 z 2.3 2.1 <NA>
# 4 2016 x 2.0 4.4 1.0
# 5 2016 y 2.1 3.1 <NA>
# 6 2016 z 5.3 0.1 <NA>
答案 1 :(得分:0)
或者与hadleyverse:
read.table(text="header_1 x x x y y z z
header_2 1 2 3 1 2 1 2
2015 3.0 4.0 2.0 3.1 2.1 2.3 2.1
2016 2.0 4.4 1.0 2.1 3.1 5.3 0.1",
header=FALSE, stringsAsFactors=FALSE) -> dat
# deal with "headers"
colnames(dat) <- c("year", sprintf("%s %s", dat[1,], dat[2,])[-1])
# reshape the data
gather(dat[-(1:2),], variable, value, -year) %>%
separate(variable, c("variable", "i")) %>%
spread(i, value)
## year variable 1 2 3
## 1 2015 x 3.0 4.0 2.0
## 2 2015 y 3.1 2.1 <NA>
## 3 2015 z 2.3 2.1 <NA>
## 4 2016 x 2.0 4.4 1.0
## 5 2016 y 2.1 3.1 <NA>
## 6 2016 z 5.3 0.1 <NA>